2011-05-03 73 views
0

有人可以填写此枚举行的其余部分吗?没有一个例子,我简直不明白枚举。我试图按距离用户最近的距离排列表格视图。下面的代码是纬度部分,它试图通过plist数据枚举(索引为4的对象是存储为NSNumber的纬度,clubLocation和myLocation是分别返回位置和用户位置的方法)。枚举如何工作以及它返回的是什么?数组?如何将数组结果与plist的其他部分同步,如位置的名称?非常感谢。了解枚举

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

} 
+0

纬度阵列持有什么?什么类型的对象? – 2011-05-03 22:57:10

+0

plist中的对象是数字,索引4处是一个双重对象。 – Eric 2011-05-03 23:03:08

回答

1

为什么不使用“快速枚举”?

for (id latitude in latitudeArray) { 
.. 
} 

您可以用数组中的纬度对象的实际类型替换id。根据你的意见,这将是NSNumber。

枚举的NSEnumerator样式以相同的方式工作。循环中的每个对象都是该数组中的一个对象,该数组将被枚举,以便它包含的每个对象都被访问一次。 “快速枚举”更好,因为它实际上速度更快,在概念上很容易看出发生了什么 - “对于所有xy”。

,让您的纬度排序按距离从表中显示,你可以创建一个从用户(NSNumber)的距离做了重点一个可变字典这是纬度的索引,用户和对象的latitudeArrayNSNumber)。然后使用该字典上的allKeys来获取所有NSNumber键的数组,并将其排序为sortedArrayUsingSelector:@selector(compare:),并且显示非常简单 - 通过获取排序数组中的第一个键,获取它在字典中键的索引然后使用该索引从latitudeArray中检索正确的纬度。

+0

感谢@Adam,让我通过今天的工作,我会尽快回复您 – Eric 2011-05-04 12:59:08