NSMutableArray и NSObject Issue - PullRequest
0 голосов
/ 28 мая 2011
Checkin *checkinsA = [[Checkin alloc] init]; 

NSDictionary * decodedJson = результат;
NSArray * users = [decodedJson objectForKey: @ "data"]; Checkin * test = [[Checkin alloc] init];

for(NSDictionary *user in users) {
    NSLog(@"Created item: %@ \n", [user objectForKey:@"created_time"]);
     checkinsA.time = [NSString stringWithFormat:@"%@",[user objectForKey:@"created_time"]];
    NSDictionary *fromData = [user objectForKey:@"from"];
     NSLog(@"user id is: %@ \n", [fromData objectForKey:@"id"]);
      checkinsA.profID = [fromData objectForKey:@"id"];

     NSLog(@"user name is: %@\n ", [fromData objectForKey:@"name"]);
      checkinsA.name =[fromData objectForKey:@"name"];

    NSDictionary *placeData = [user objectForKey:@"place"];
    NSDictionary *locationData = [placeData objectForKey:@"location"];
     NSLog(@"City: %@ \n", [locationData objectForKey:@"city"]);
      checkinsA.city = [locationData objectForKey:@"city"];

     NSLog(@"Country: %@ \n", [locationData objectForKey:@"country"]);
      checkinsA.country = [locationData objectForKey:@"country"];

     NSLog(@"Latitude: %@ \n", [locationData objectForKey:@"latitude"]);
     checkinsA.lat = [locationData objectForKey:@"latitude"];

     NSLog(@"Longitude: %@ \n", [locationData objectForKey:@"longitude"]);
     checkinsA.lon = [locationData objectForKey:@"longitude"];

     NSLog(@"Place name: %@ \n", [placeData objectForKey:@"name"]);
     checkinsA.place = [placeData objectForKey:@"name"];

    NSDictionary *tagData = [user objectForKey:@"tags"];
    NSArray *tagDataArray = [tagData objectForKey:@"data"];
    for(NSDictionary *tagData2 in tagDataArray){
      NSLog(@"tagged user id is: %@ \n", [tagData2 objectForKey:@"id"]);
        [checkinsA.taggedID addObject:[tagData2 objectForKey:@"id"]];
      NSLog(@"tagged user name is: %@\n ", [tagData2 objectForKey:@"name"]);
         [checkinsA.taggedName addObject:[tagData2 objectForKey:@"name"]];
    }

    [checkinArray addObject:checkinsA];
    test = [checkinArray objectAtIndex:count2];
    NSLog(@"Check array: %@",test.name);
    count2++;
}
for(int i=0;i<count2;i++)
{
    test = [checkinArray objectAtIndex:i];
    NSLog(@"%@",test.name);
}

}

Мой NSobject - CheckinsA. Я собираю данные из строки ответа, используя NSDictionary. Здесь я пытаюсь сохранить каждый CheckinsA в массиве checkin. Это выглядит нормально:

`[checkinArray addObject: checkinsA];

test = [checkinArray objectAtIndex:count2];

NSLog(@"Check array: %@",test.name);`

и печатает правильное значение. Но когда цикл завершен, и я пытаюсь распечатать значения из массива, используя цикл, выводится только последний CheckinsA !! Я пытался напечатать это с помощью:

test = [checkinArray objectAtIndex:0];
NSLog(@"%@",test.name);
test = [checkinArray objectAtIndex:1];
NSLog(@"%@",test.name);

(на случай, если проблема возникла в моем цикле, но он все еще печатает только последние CheckinsA). Так почему весь мой массив заполнен только последними CheckinsA? Это странно!

Ответы [ 3 ]

1 голос
/ 28 мая 2011

Вы добавляете один и тот же объект в массив каждый раз. Переместите код следующим образом:

Checkin *checkinsA
for(NSDictionary *user in users) {
    checkinsA = [[Checkin alloc] init];
    // loop code
    [checkinArray addObject:checkinsA];
    [checkinsA release];
}
0 голосов
/ 28 мая 2011

проверить ваш массив с помощью
NSLog (@ "% @", [checkinArray description]);

0 голосов
/ 28 мая 2011

Вам нужно инициализировать новый объект каждый раз, когда вы зацикливаетесь.В противном случае вы изменяете тот же объект.

сделать Checkin *checkinsA = [[Checkin alloc] init]; первой строкой цикла и в конце, после того как вы добавите checkinsA в массив, выполните [checkinsA release];

...