Проблема с NSMutableArray и NSObject

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 в массиве checkinArray. Это выглядит нормально:

`[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? Это странно!


person user622203    schedule 28.05.2011    source источник


Ответы (3)


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

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

person Deepak Danduprolu    schedule 28.05.2011
comment
Что насчет этого? test = [checkinArray objectAtIndex:count2];? Это все еще то же самое? - person user622203; 28.05.2011
comment
Отлично!! Теперь все в порядке! Просто подождите 7 минут, чтобы отметить свой ответ как правильный!! Спасибо. - person user622203; 28.05.2011

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

Checkin *checkinsA
for(NSDictionary *user in users) {
    checkinsA = [[Checkin alloc] init];
    // loop code
    [checkinArray addObject:checkinsA];
    [checkinsA release];
}
person vakio    schedule 28.05.2011
comment
Спасибо, Вакио, но Дипак отвечает первым, поэтому я должен отдать ему должное за правильный ответ. - person user622203; 28.05.2011

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

person Rams    schedule 28.05.2011