2011-05-28 3 views
0
Checkin *checkinsA = [[Checkin alloc] init]; 

NSDictionary * decodedJson = result;
NSArray * users = [décodedJson objectForKey: @ "données"]; Checkin * test = [[Checkin alloc] init];NSMutableArray et NSObject Problème

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); 
} 

}

Mon NSObject est le CheckinsA. Je collecte des données à partir d'une chaîne de réponse en utilisant NSDictionary. Ce que j'essaie de faire ici est de sauvegarder chaque CheckinsA dans un checkinArray. Cela semble bien:

`[checkinArray addObject: checkinsA];

test = [checkinArray objectAtIndex:count2]; 

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

et imprime la bonne valeur. Mais quand la boucle est finie et que j'essaye d'imprimer les valeurs du tableau en utilisant une boucle, j'imprime seulement le dernier CheckinsA !! J'ai essayé d'imprimer avec:

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

(juste au cas où ma boucle était le problème, mais son impression encore que la dernière CheckinsA). Alors, pourquoi mon tableau entier est rempli uniquement avec le dernier CheckinsA? C'est étrange!

Répondre

0

Vous devez initialiser un nouvel objet chaque fois que vous bouclez. Sinon, vous changez le même objet.

faire Checkin *checkinsA = [[Checkin alloc] init]; la première ligne dans la boucle et à la fin une fois que vous avez terminé d'ajouter checkinsA au tableau, faire [checkinsA release];

+0

Que pensez-vous de cela? test = [checkinArray objectAtIndex: count2] ;? C'est toujours pareil? – user622203

+0

Excellent !! C'est bon maintenant! Attendez juste 7 minutes pour marquer votre réponse comme la bonne! Je vous remercie. – user622203

1

Vous ajoutez le même objet au tableau chaque fois. Déplacez-vous le code comme ceci:

Checkin *checkinsA 
for(NSDictionary *user in users) { 
    checkinsA = [[Checkin alloc] init]; 
    // loop code 
    [checkinArray addObject:checkinsA]; 
    [checkinsA release]; 
} 
+0

Merci vakio mais Deepak répond d'abord donc je dois le créditer avec la bonne réponse. – user622203

+0

Premier arrivé, premier servi. – vakio

0

Vérifiez votre tableau en
NSLog (@ "% @", [description checkinArray]);