Цикл по списку, содержащему массив словарей - PullRequest
0 голосов
/ 03 октября 2011

У меня есть список, содержащий массив из трех элементов, каждый из которых является словарём. Эти словари содержат четыре элемента каждый (широта, долгота, заголовок, субтитры). Я хочу пройтись по каждому из элементов и получить широту и долготу (оба из которых являются атрибутами словаря).

Используется следующий код.

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

        }
    }

Проблема в том, что он не входит в цикл. Это означает, что он не выводит команду журнала «Привет, внутри цикла».

Ответы [ 3 ]

2 голосов
/ 03 октября 2011

Давайте предположим, что этот код выполнен успешно (мы должны предположить, потому что вы, кажется, не проверяете, чтобы убедиться). Давайте также предположим (потому что вы не говорите) "branchList" является переменной экземпляра в текущем классе:

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

Надеюсь, это оставит вас с массивом. Конечно, вы можете устранить «надеюсь», проверив, чтобы убедиться, что он оставляет вас с массивом (if (branchList)...). Затем, так как «branchList» кажется переменной экземпляра, вы немедленно уничтожаете его, заменяя его пустым массивом (используя аксессор, а не устанавливаете его напрямую, как вы делали выше):

self.branchList =[NSMutableArray array];

... поэтому вы пытаетесь перебрать пустой цикл (чтобы оператор NSLog() никогда не выполнялся).

0 голосов
/ 03 октября 2011
if([branchlist count]){
    for (NSDictionary *key in self.branchList) {
           NSLog(@"Key item in branchlist %@",key);
    }
}else{
     NSLog(@"There is no items in branchlist");
}
0 голосов
/ 03 октября 2011
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");
...