通过包含一系列字典的plist循环

时间:2011-10-03 15:03:27

标签: iphone objective-c ios xcode4 nsdictionary

我有一个plist包含一个包含三个元素的数组,所有这些元素都是字典。这些词典每个包含四个项目(纬度,经度,标题,副标题)。我想循环遍历每个元素并获得纬度和经度(两者都是字典的属性)。

使用以下代码。

    - (void)loadAnnotations{

    //retrieve path of plist file and populate relevant types with its information
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Places1" ofType:@"plist"];
    branchList = [[NSArray alloc] initWithContentsOfFile:plistPath];

     NSLog(@"hi inside method",branchList.lastObject);

    self.branchList =[NSMutableArray array];
    //code ok until this
   for (NSDictionary *key in branchList)
 {    NSLog(@"hi in loop");

        PlaceFinderAnnotation *placeAnnotations = [[PlaceFinderAnnotation alloc] init];  
        //loop through annotations array, creating parking annotations filled with the information found in the plist

            CLLocationDegrees latitude = [[key valueForKey:@"latitude"]floatValue];
            CLLocationDegrees longitude = [[key valueForKey:@"longitude"]floatValue];
            placeAnnotations.coordinate = CLLocationCoordinate2DMake(latitude, longitude);

            [self.branchList addObject:placeAnnotations];
            [placeAnnotations release]; placeAnnotations= nil;
            objectForKey:@"subtitle"]];

        }
    }

问题是它没有进入循环。意思是它不会打印出日志命令“hi在looppp中”。

3 个答案:

答案 0 :(得分:2)

让我们假设此代码成功(我们必须假设您似乎没有检查以确保)。我们也假设(因为你没有说)“branchList”是当前类中的一个实例变量:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Places1" ofType:@"plist"];
branchList = [[NSArray alloc] initWithContentsOfFile:plistPath];

这有希望留给你一个阵列。当然,您可以通过...检查以确保它为您留下一个数组(if (branchList)...)来消除“希望”。然后,由于“branchList”似乎是一个实例变量,你可以立即将它替换为空数组(使用访问器而不是像上面那样直接设置):

self.branchList =[NSMutableArray array];

...所以你尝试迭代一个空循环(所以永远不会执行NSLog()语句)。

答案 1 :(得分:0)

self.branchList =[NSMutableArray array];

创建一个空数组,这就是要求for语句循环的内容。

删除该声明。

也许这就是你想要的:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Places1" ofType:@"plist"];
self.branchList = [NSArray arrayWithContentsOfFile:plistPath];
NSLog(@"hi inside method",branchList.lastObject);

for (NSDictionary *key in self.branchList) {
    NSLog(@"hi inside loopppp");

答案 2 :(得分:-1)

if([branchlist count]){
    for (NSDictionary *key in self.branchList) {
           NSLog(@"Key item in branchlist %@",key);
    }
}else{
     NSLog(@"There is no items in branchlist");
}