2012-02-07 4 views
3

NSDictionaryのは、次のメソッドのシグネチャがあります。ブロックをiOSのnotFoundMarkerの値として使用できますか?

- (NSArray *)objectsForKeys:(NSArray *)keys notFoundMarker:(id)anObject; 

私の質問(複数可):

  1. notFoundMarkerに使用する合理的なデフォルトはnilですか?
  2. notFoundMarkerとしてキー(値が見つからなかったもの)を戻すことはできますか?これは、キーと値が異なるオブジェクト型であり、まだ欠けているものを知ることができる場合に便利です。
  3. ブロックをnotFoundMarkerの値として使用できますか。実際には実行されますか?または、ブロックのスタック割り当てアドレスは単に返されますか?
  4. notFoundMarkerの値として試して使用するのに本当に悪い点は何ですか?

答えて

2
  1. として、あなたはおそらくないこれを行うには、独自のラッパー・メソッドまたはカテゴリのいくつかの並べ替えを記述することなく

  2. [NSNull null]を使用する必要があり、以下のコメントで指摘しました。つまり、どのキーが見つからないかを知りたい場合は、渡されたキーの配列を見て、インデックスが一致するようにするだけです。

  3. 確かにブロックを使用できます。私はそれが実行されるとは思わない。これは非常に簡単にテストすることができます(コンソールに何かをログアウトして試してみるブロックを定義するだけです)。

  4. これは本当にコンテキストと、返された配列と何をするかによって異なります。配列に入れて返すのが本質的に悪いことは何もありませんが、私はのNSDictionaryにあるキーに対して返されると予想されるオブジェクトの型に一致しないものを使用するかどうかの疑問を質問します。

EDIT:

NSMutableArray *objects = [myDictionary objectsForKeys:myKeys notfoundMarker:[NSNull null]]; 
    for (int ii = 0; ii < [objects count]; ii++) { 
     if ([objects objectAtIndex:ii] == [NSNull null]) { 
      [objects insertObject:[myKeys objectAtIndex:ii] atIndex:ii]; 
     } 
    } 
+0

あなたが質問について間違っている1. 'nil'は中値として許可されていません。実際には は、あなたはおそらく、あなたがこのような2用の欲しいものを達成できますコレクション。 'notFoundMarker:nil'を設定すると、ランタイム例外が発生します。代りに '[NSNull null]'を使用してください。これは、コレクションのnull値を表すことを意図しています。 – Eliot

+2

それは本当だとは思わない。 'NSDictionary'で' nil'をキーとして使用しようとすると、ランタイム例外がスローされますが、問題なしでNSArrayに 'nil'を持たせることは可能です。 –

+1

明確にするために、上記の意味は、問題なくNSArrayに 'nil'を追加できるということです。この場合、 '[NSNull null]'のほうが優れています。そうでなければ、上記の私の例はうまくいきません。これを反映するように答えを編集します。それを指摘してくれてありがとう:) –

関連する問題