2012-01-11 12 views
5

estoy consiguiendo la distancia de 2 puntos como estoOrden de la célula tableview el subtítulo

[userLocation distanceFromLocation: annotationLocation]/1000; 

y establecer esta opción en el subtítulo de un tableview como la imagen de abajo screenshot http://i41.tinypic.com/ruxv74.png

la pregunta es ¿Puedo ordenar esta tabla por las distancias (subtítulo)?

Gracias!

y lo siento por la mala Inglés = x

+0

Douglas, ¿qué solución acabas de usar? ¿Estás usando CoreData? – marciokoko

+0

la solución de ferostar funciona para mí. Estoy usando el archivo .plist. userlocation y annotationLocation son ambos CLLocation. Así que usé -initWithLatitude: longitude: y -distanceFromLocation: para obtener las distancias y ordenarlas en un NSArray. –

+0

Quizás sería mejor chatear pero tengo la variedad de ubicaciones con latitud y longitud. Calculo la distancia desde UserLocation a cada ubicación. Así que tengo todos los datos, entonces, ¿qué pongo en la nueva matriz? Aquí: http: //stackoverflow.com/questions/14845434/how-do-i-sort-table-cells-from-core-data – marciokoko

Respuesta

6

Puede ordenar las células de su UITableView alguna manera de desear, pero hay que hacerlo antes de mostrarlos, al crear la fuente de datos de la tabla. Si usa un NSFetchResultsController, puede poner la distancia como el descriptor de clasificación. Y si está usando una matriz NS (mutable) simple, ordénela antes de convertirla en la fuente de la tabla.

Al igual que Chris dijo, puede hacerlo con

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"annotationLocation" ascending:YES]; 

Si se trata de un NSArray lo que está utilizando, entonces:

[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter]; 

y si se trata de una NSFetchResultsController:

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:titleSorter, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
+0

¡Perfecto! es un trabajo muy bueno para mí. Gracias a todos =] –

+0

pero annotationLocation no está en la base de datos. Tengo lat y long. – marciokoko

0

Haz una matriz con estas distancias, ordénalo como quieras y

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *cellIdentifier = @"cellIdentifier"; 
    UITableViewCell *_cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (_cell == nil) { 
     _cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease]; 
    } 
    _cell.textLabel.text = @"Transcripts"; 
    _cell.detailTextLabel.text = [yourArray objectAtIndex:indexPath.row]; 
    return _cell; 
} 

Bueno, algo así debería hacer el truco.

creo que sirve

+0

En mi base de datos de CD solo tengo latitud y longitud.Actualmente los lugares clasificados de esta manera: ' [setSortDescriptors solicitud: [NSArray arrayWithObject: [NSSortDescriptor sortDescriptorWithKey: @ "fecha" ascendente: SÍ]]]; self.dates = [self.managedObjectContext executeFetchRequest: error de solicitud: & error]; ' – marciokoko

1

Crear una NSSortDescriptor para ordenar sus filas:

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"annotationLocation" ascending:YES]; 
[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter]; 
0

Asumiendo que tiene unos ciertos objetos que sostiene una coordenada y poner los objetos a un ubicaciones de matriz, puede utilizar un comparador bloque haciendo:

locations = [locations sortedArrayUsingComparator: ^(id a, id b) { 

    CLLocationDistance dist_a= [[a objectsForKey:@"coordinate"] distanceFromLocation: userPosition]; 
    CLLocationDistance dist_b= [[b objectsForKey:@"coordinate"] distanceFromLocation: userPosition]; 
    if (dist_a < dist_b) { 
     return (NSComparisonResult)NSOrderedAscending; 
    } else if (dist_a > dist_b) { 
     return (NSComparisonResult)NSOrderedDescending; 
    } else { 
     return (NSComparisonResult)NSOrderedSame; 
    } 
} 

agregue este código a su viewWillAppear: para obtener ubicaciones actualizadas cada vez que visualice el tableView .

Cuestiones relacionadas