有人可以填写此枚举行的其余部分吗?没有例子,我根本不理解枚举。我正在尝试按离用户最近的距离排列表格视图。下面的代码是纬度部分,它试图通过数据的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 :(得分:1)
为什么不使用“快速枚举”?
for (id latitude in latitudeArray) {
..
}
您可以将id
替换为数组中纬度对象的实际类型。根据你的意见,这将是NSNumber。
NSEnumerator枚举样式的工作方式相同。循环中的每个对象都是数组中的一个对象,枚举数组以便它包含的每个对象都被访问一次。 “快速枚举”更好,因为它实际上更快,从概念上来说很容易看出发生了什么 - “对于所有x in y”。
要根据用户对表格显示的距离对纬度进行排序,您可以创建一个可变字典,其中的密钥由距用户(NSNumber
)的距离和一个对象组成,该对象是该纬度的索引。您的latitudeArray
(NSNumber
)。然后在该字典上使用allKeys
来获取所有NSNumber密钥的数组,使用sortedArrayUsingSelector:@selector(compare:)
对其进行排序,并且显示很简单 - 第一个表条目将通过获取排序数组中的第一个键来获得,获取它在字典中键入的索引,然后使用该索引从latitudeArray
中检索正确的纬度。