2009-08-26 6 views
0

次のコードでNSMutableArray(MessageArray)のサブセットを返そうとしています。 MessageArrayには、FriendStatusのキーの1つであるNSDictionaryが含まれています。私はDUHの構文上の問題であると知っている奇妙なエラーが発生します。 msgstr "無効な値は無視されません"。NSMutableArray from filterUsingPredicateエラー

-(NSMutableArray*)FriendMessageArray { 

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

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

}

+0

filterUsingPredicateはNSMutableArrayを変更するvoidであることが分かりました。より良い方法がない限り、私が望む値だけを含むNSMutableArrayのコピーを作る必要があるようです。 – Kevin

答えて

2

「があるべきであるとして無視しないボイド値は」(ボイド)で始まる署名付きメソッドは、変数に値またはオブジェクトを割り当てるために使用されていることを意味します。 filterUsingPredicateのシグニチャは何ですか?それは(空)から始まるのですか?

+0

です。それで?私はこれを理解できません。 – Kevin

+3

'-filterUsingPredicate:'は元の(変更可能な)配列を変更します。 – Wevah

2

私は "MessageArray"がインスタンス変数であると仮定しています(このようにインスタンス変数に名前を付けることはありません; -messagesというプロパティがあり、self.messagesでアクセスする必要があります)。私はさらにそれがNSMutableArrayであると仮定します。そうしないと、コンパイラからの警告が表示されます。

NSMutableArray -filterUsingPredicate:は、配列自体を変更してvoidを返します。目的のメソッドは配列を返す-filteredArrayUsingPredicate:です。前者が動詞で後者が名詞であるという事実は、文書を読まなくてもこの事実を示しています。ココアの命名は非常に一貫しているので、最初の段落でそれを言及しています。名前に注意を払うと、はるかに少ないバグがあります。

+0

MessageArrayはNSMutableArray型です。私の理解から、-filteredArrayUsingPredicateはNSArrayに属し、-filterUsingPredicateはNSMutableArrayに属します。私がコピーを作っているように見えます。 – Kevin

+1

NSMutableArrayはNSArrayのサブクラスです。すべてのNSArrayメソッドはNSMutableArrayで使用できます。 –