2009-08-26 9 views
0

J'essaie de renvoyer un sous-ensemble de mon NSMutableArray (MessageArray) avec le code suivant. MessageArray contient un NSDictionary, l'une des clés étant FriendStatus. Je reçois une erreur étrange qui, je sais, est un problème de syntaxe DUH. "error.valeur non ignorée comme elle devrait l'être".NSMutableArray from filterUsingPredicate erreur

-(NSMutableArray*)FriendMessageArray { 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FriendStatus == 1"]; 

NSMutableArray *filtered = [MessageArray filterUsingPredicate:predicate]; 
return filtered; 

}

+0

Je comprends maintenant que filterUsingPredicate est un vide qui modifie NSMutableArray. Il semblerait que je devrais faire une copie de NSMutableArray contenant seulement les valeurs que je veux à moins qu'il y ait une meilleure manière. – Kevin

Répondre

2

« valeur nulle non ignoré car il doit être » signifie qu'un procédé avec une signature qui commence par (void) est utilisée pour assigner une valeur ou d'un objet à une variable . Quelle est la signature de filterUsingPredicate? ça commence par (vide)?

+0

C'est le cas. Maintenant quoi? Je ne peux pas comprendre ça. – Kevin

+3

'-filterUsingPredicate:' modifie le tableau original (mutable). – Wevah

2

Je suppose que "MessageArray" est une variable d'instance (ne jamais nommer les variables d'instance de cette façon, vous devriez avoir une propriété appelée -messages et y accéder avec self.messages). Je suppose en outre que c'est un NSMutableArray ou bien vous obtiendriez des avertissements du compilateur.

NSMutableArray -filterUsingPredicate: modifie le tableau lui-même, retournant void. La méthode que vous voulez est -filteredArrayUsingPredicate: qui retourne un tableau. Le fait que le premier est un verbe et le dernier est un nom indique ce fait même sans lire les docs. La dénomination Cocoa est extrêmement cohérente, c'est pourquoi je le mentionne dans le premier paragraphe. Faites attention aux noms et vous aurez beaucoup moins de bugs.

+0

MessageArray est de type NSMutableArray comme je l'ai indiqué. A ma connaissance, -filteredArrayUsingPredicate appartient à NSArray, et -filterUsingPredicate appartient à NSMutableArray. On dirait que je fais peut-être une copie. – Kevin

+1

NSMutableArray est une sous-classe de NSArray. Toutes les méthodes NSArray sont disponibles pour NSMutableArray. –