2014-07-21 4 views
0

La réponse de mon service est enregistrée dans un NSMutableArray et également dans une classe globale pour l'utiliser dans les futurs viewcontrollers.L'objet NSArray remplace tous les objets contenant

todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"] 
         objectForKey:@"EntityList"]; 
[[CommonClass sharedInstance] setTodoListDetailArray:[[tempResponse 
      objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"]]; 

lorsque jamais un objet supprimé de todoDetailArray, le même objet dans [[CommonClass sharedInstance] TodoListDetailArray] est également se supprimé.

S'il vous plaît aider ici, pourquoi ce comportement de NSArray.

Merci à l'avance ..

Répondre

0

Si ce que vous voulez est que les articles ne doivent pas être retirés de TodoListDetailArray lorsque vous les retirez de todoDetailArray, puis il suffit de copier le tableau vers votre classe partagée:

[[CommonClass sharedInstance] setTodoListDetailArray:[[[tempResponse 
     objectForKey:@"GetToDoListResult"] copy] objectForKey:@"EntityList"]]; 

En faisant cela, les deux tableaux sont indépendants les uns des autres. Sinon, il n'y aura qu'un seul tableau, donc lorsque vous le modifiez en utilisant une référence, il apparaîtra modifié lors de l'accès à partir de l'autre référence.

0

Les deux tableaux partageant une référence commune de sorte que la modification dans un tableau reflète dans un autre. Donc, vous pouvez faire comme ceci

todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"] 
         objectForKey:@"EntityList"]; 
[[CommonClass sharedInstance] setTodoListDetailArray:[todoDetailArray mutableCopy]]; 

mutableCopy pour matrice mutable.

0

C'est parce que les deux partagent une référence partagée à une même adresse mémoire. Donc, si vous voulez que les deux soient indépendants les uns des autres, vous avez juste besoin de faire une copie profonde de celui-ci. Maintenant, il fait juste une copie superficielle. (Une copie en profondeur dupliquer les objets référencés alors qu'une copie superficielle ne fait que dupliquer les références à ces objets.)

Ainsi, comme indiqué ci-dessus:

todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"]; [[[CommonClass sharedInstance] setTodoListDetailArray:[[[tempResponse objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"] mutableCopy]];;

Maintenant, les deux todoDetailArray et [CommonClass sharedInstance] ont autre copie des objets.

Merci

Questions connexes