Перечислите широту и долготу из Plist - PullRequest
0 голосов
/ 03 мая 2011

Я хочу отсортировать табличный вид мест по расстоянию, ближайшему к пользователю.У меня есть три метода (myLocation, clubLocation и enumerate).Значения lat и long хранятся в plist (objectatIndex 4 и 5 соответственно для кода ниже).Я создал два массива, один для lat и один для long ниже в методе перечисления, но у меня есть умственный блок на том, как соединить все вместе.Я бы предположил, что перечисление вернет массив (вместо void, это просто заполнитель).Как он может вернуть два массива одновременно?Должен ли я перечислить один раз для лат и один раз для длинных?Пожалуйста, помогите.

Я обновил, чтобы иметь два метода, один для Lat и один для Long, как мне вернуть расстояния и связанные с ними объекты?Например, массив только расстояний мне не нужен, так как мне нужно знать, какое расстояние связано с каким местоположением?

    -(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;
    }

1 Ответ

0 голосов
/ 03 мая 2011

Возврат более 1 значения может быть выполнен как минимум тремя простыми способами

  1. с использованием пользовательской структуры (struct Pair {id first; id second;})

  2. с помощью nsarray для хранения обоих объектов

  3. использование указателей на переменные в качестве аргументов (enumerationWithFirst: (NSArray *) первая секунда: (NSArray *) секунда

Использование Objective-C ++ добавляет еще несколько опций, но они должны подойти.

Кстати, использование двух методов "перечислителя" имеет больше смысла. По сути, вы возвращаете свойства из простой структуры данных.

Да, и, пожалуйста, проверьте ваш код на наличие утечек. Есть несколько, если я не ошибаюсь.

...