2011-05-03 3 views
0

Je veux trier un tableauVoir des lieux par distance plus proche de l'utilisateur. J'ai trois méthodes (myLocation, clubLocation et énumération). Les lat et long sont tenus sur une plist (objectatIndex 4 et 5 respectivement pour le code ci-dessous). J'ai créé les deux tableaux, un pour les lat et un pour les plus longs dans la méthode d'énumération, mais j'ai un blocage mental sur la façon de tout connecter ensemble. Je suppose que l'énumération retournerait un tableau (au lieu de vide, c'est juste un espace réservé). Comment peut-il retourner deux tableaux à la fois? Dois-je énumérer une fois pour lat et une fois pour longtemps? S'il vous plaît aider.Enumerate Latitude et Longitude de Plist

J'ai mis à jour pour avoir deux méthodes une pour Lat et une pour Long, comment puis-je retourner les distances et leurs objets associés? Par exemple, un tableau de distances justes ne me convient pas, car j'ai besoin de savoir quelle distance est associée à quel endroit?

-(NSArray *)distanceFromLat 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Data3" ofType:@"plist"]; 
    NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 

    NSMutableArray *latitudeArray = [[NSMutableArray alloc] init]; 
    latitudeArray = [[tempDictionary objectForKey:@"Subtree"]objectAtIndex:4]; 

    NSEnumerator *enumLat = [latitudeArray objectEnumerator]; 
    id object; 

    while ((object = [enumLat nextObject])) { 
     [myLocation distanceFromLocation:clubLocation]; 
    } 

} 

-(NSArray *)distanceFromLong 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Data3" ofType:@"plist"]; 
    NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 

    NSMutableArray *longitudeArray = [[NSMutableArray alloc] init]; 
    longitudeArray = [[tempDictionary objectForKey:@"Subtree"]objectAtIndex:5]; 
    NSEnumerator *enumLong = [longitudeArray objectEnumerator]; 
    id object; 

    while ((object = [enumLong nextObject])) { 
     [myLocation distanceFromLocation:clubLocation]; 
    } 

} 

    -(CLLocation *)clubLocation 
    { 
     NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Data3" ofType:@"plist"]]; 
     NSArray *array = [dictionary objectForKey:@"Subtree"]; 
     NSNumber *latitude = [NSString stringWithFormat:@"%@",[array objectAtIndex:4]]; 
     NSNumber *longitude = [NSString stringWithFormat:@"%@",[array objectAtIndex:5]]; 
     double clubLatitude = [latitude doubleValue]; 
     double clubLongitude = [longitude doubleValue]; 
     clubLocation = [[CLLocation alloc]initWithLatitude:clubLatitude longitude:clubLongitude]; 
     return clubLocation; 

    } 

    -(CLLocation *)myLocation 
    { 
     CLLocation *location = [locationManager location]; 
     CLLocationCoordinate2D coordinate = [location coordinate]; 
     NSNumber *myLatitude = [NSNumber numberWithDouble:coordinate.latitude]; 
     NSNumber *myLongitude = [NSNumber numberWithDouble:coordinate.longitude]; 
     double myLatitudeD = [myLatitude doubleValue]; 
     double myLongitudeD = [myLongitude doubleValue]; 
     myLocation = [[CLLocation alloc]initWithLatitude:myLatitudeD longitude:myLongitudeD]; 
     return myLocation; 
    } 

Répondre

0

De retour plus de 1 valeur peut se faire dans au moins trois façons simples

  1. utilisant un struct personnalisé (struct paire {id d'abord; id seconde;})

  2. utilisant un nsarray pour contenir les deux objets

  3. en utilisant des pointeurs-de-variables comme arguments (enumerationWithFirst: (NSArray * ) première seconde: (NSArray *) deuxième

En utilisant Objective-C++ ajoute quelques options, mais celles-ci devraient faire. Par ailleurs, l'utilisation de deux méthodes «énumérateur» est plus logique. Vous renvoyez essentiellement des propriétés à partir d'une structure de données simple.

Oh, et s'il vous plaît vérifier votre code pour les fuites. Il y en a quelques-uns, si je ne me trompe pas.

+0

J'ai mis à jour la question avec deux nouvelles méthodes, pouvez-vous les regarder? En outre, je sais qu'il y a des fuites de mémoire, je n'ai pas encore traité avec eux. Merci – Eric

+0

J'ai toujours besoin d'aide avec le code que j'ai mis à jour, si quelqu'un pouvait m'aider. – Eric