从Plist枚举纬度和经度

时间:2011-05-03 14:03:36

标签: iphone plist enumeration cllocationmanager

我想按最接近用户的距离对地方的表格进行排序。我有三个方法(myLocation,clubLocation和enumerate)。 lat和long都保存在plist上(objectatIndex 4和5分别代表下面的代码)。我已经在枚举方法中创建了两个数组,一个用于lat,另一个用于long,但是我对如何将所有内容连接在一起有一个心理障碍。我假设枚举将返回一个数组(而不是void,这只是一个占位符)。它如何一次返回两个数组?我是否一次列举lat和一次?请帮忙。

我已经更新了两个方法,一个用于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 :(得分:0)

至少可以通过三种简单的方式返回超过1个值

  1. 使用自定义结构(struct Pair {id first; id second;})

  2. 使用nsarray来保存两个对象

  3. 使用指针变量作为参数(enumerationWithFirst:(NSArray * )第一秒:(NSArray *)second

  4. 使用Objective-C ++会增加一些选项,但这些选项应该可以。

    顺便说一句,使用两个“枚举器”方法更有意义。您实际上是从简单的数据结构中返回属性。

    哦,请检查您的代码是否泄漏。如果我没有弄错的话,有一些。