2012-11-01 4 views
0

Pour une raison quelconque, je ne peux pas affecter un objet que je récupère d'un tableau mutableImpossible d'attribuer l'objet récupéré à partir NSMutableArray

MISE À JOUR: Notez que j'utilise ARC

Voici le code :

id<Control> control = [formControlUtils getControlWithId:@"123"]; 
// Here control.controlValue is "Old value" 
control.controlValue = @"New value"; 
// Even after assigning a new value to the property the value is still "Old value" 

- (id<Control>)getControlWithId:(NSString *)controlId { 
id<Control> control = nil; 

for (NSArray *array in [FormRenderManager sharedInstance].formControls) 
{ 
    //[FormRenderManager sharedInstance].formControls is a mutable array, so is the nested arrays 
    control = [[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"controlId = %@", controlId]] lastObject]; 

    if (control) 
     break; 
} 

return control; 
} 

Comme vous pouvez le voir dans mes commentaires de code ci-dessus, chaque fois qu'un assign une nouvelle valeur à control.controlValue l'ancienne valeur persiste.

Pourquoi est-ce? Est-ce que je manque peut-être quelque chose de fondamental ici ou est-ce dû au fait que je travaille contre un protocole <id>Control control?

+0

Est-ce que '[FormRenderManager sharedInstance] .formControls' renvoie toujours le même tableau, ou une nouvelle instance auto-libérée pour chaque appel? –

+0

J'ai mis à jour ma question pour indiquer que j'utilise ARC. [FormRenderManager sharedInstance] .formControls retournera toujours le même tableau. – RynoB

+0

merci! Très étrange dans ce cas ... Je vais y réfléchir plus. –

Répondre

1

filteredArrayUsingPredicate renvoie un tableau immuable. Vous devrez faire ceci:

[NSMutableArray arrayWithArray:[array filtered...]]; 
+0

Merci, cela a fait l'affaire! – RynoB

Questions connexes