まず、NSArrayとNSDictionaryのAppleのマニュアルを参照してください。この場合、配列(NSArray)にはいくつかのNSDictionariesが含まれているように見えます。
データはnsdictionaryに格納され、nsmuttablearrayに渡されます。
まず、Objective-Cの変数はポインタに過ぎないことに注意してください。あなたはこのような行がある場合:「私は、この変数はNSMutableArrayのを指すように期待」
NSMutableArray *rows;
をあなただけのそれはかなり同等
id rows;
、にある、と言っている...そして、あなたは意志実行時に、可変配列に対して宣言された変数に通常の配列を置くこと(または辞書のために宣言された変数に文字列を置くこと)を止めてはいけません。それが動作します!しかし、あなたのプログラムは、変更できない配列や文字列に対する辞書のものに対して変更可能なことをしようとするとクラッシュします。
代わりにIDを、いくつかの利点があり、NSMutableArrayのへのポインタとして、それを宣言:
- それはあなたがしようとすると、コンパイラが警告を表示することができますメソッド名
- をオートコンプリートによって、XCodeの助けにあなたをすることができます :NSMutableArrayのは、あなたの変数は、この行に、
NSMutableArray *rows
として宣言されている場合でも、だから、
を持っていないメソッドをコールします
...「コース」オブジェクトが変更可能でない場合は、rows
にあるものもそうではありません。 (あなたは、元を保持しているかのように、解放する必要があり)、配列の独自のNSMutableArrayのコピーを取得するには...
rows = [[dict objectForKey:@"courses"] mutableCopy];
:代わりに、あなたはこれを行うことができます。
標準のCocoaコードで配列と辞書を探索できます。ここでは「月曜日」のコースのすべてを取得するための一つの方法のようになります。
NSMutableArray *mondayCourses = [NSMutableArray array];
for (NSDictionary* course in rows){
if([[course objectForKey:@"Day"] isEqual:@"Monday"]){
[mondayCourses addObject:course];
}
}
(警告、私はこのコードを実行していない。)
出典
2011-07-27 23:46:44
s4y
おかげでそれを持っていたら、データを操作する方法を理解しないで結構です。述語に関して、私が価値を渡そうとすると、例えば、 rows = mondayCourses私のプログラムがクラッシュし、コンソールに何もありません。行はnsarray形式ですが、何か考えていますか? –
JSON構造の例を正しく見ていれば、NSDictionaryの "rows"はキー "Array"を持つキーと値のペアを1つだけ保持します。 このように配列を作成すると便利です。 NSArray * courses = [rows objectForKey:@ "Array"]; は次にあなたが、ほぼそのまま私の述語コードを使用することができます(ちょうど変更[行filteredArrayUsingPredicate:述語]; [コースfilteredArrayUsingPredicate:述語]に;) –
おかげで、本当に便利な答え:] –