J'utilise la méthode suivante dans mon code:[Communiqué CFArray]: message envoyé à l'instance désallouées
- (NSMutableArray *) newOrderedArray:(NSMutableArray *)array ByKey:(NSString *)key ascending:(BOOL)ascending {
NSSortDescriptor *idDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:ascending];
NSArray *sortDescriptors = [NSArray arrayWithObject:idDescriptor];
NSArray *orderArray = [array sortedArrayUsingDescriptors:sortDescriptors];
[idDescriptor release];
NSMutableArray *result = [NSMutableArray arrayWithArray:orderArray];
return result;
}
Est-ce une méthode pratique bien codé? Comme je pense, il renvoie un NSMutableArray autoreleased.
Cette méthode est appelée par un autre:
- (id) otherMethod {
NSMutableArray *otherResult = [[[NSMutableArray alloc] initWithCapacity:[otherArray count]] autorelease];
// I add some stuff to otherResult and then...
NSMutableArray *result = [dbUtils newOrderedArray:otherResult ByKey:@"objectId" ascending:NO];
return result;
}
Cette méthode (otherMethod) est appelé dans certains contrôleur de vue où je veux stocker tableau retourné et relâchez quand désaffecter le contrôleur de vue. Cependant, lorsque [résultat retain] est appelé dans ce contrôleur de vue (parce que je besoin d'être disponible et je ne peux pas lui permettre d'être désallouée) Je reçois l'erreur suivante:
[CFArray release]: message sent to deallocated instance
J'ai essayé de log [result retainCount]
juste avant d'appeler conserver et imprimer "1". Je ne comprends pas pourquoi une erreur est levée lors de l'appel de retain.
Merci,
A
Vous avez raison, le problème n'était pas sur le message conservé, c'était dans l'assignation self.array = result parce que dans un endroit précédent j'assignais en utilisant array = result (sans utiliser self) – arielcamus