2009-06-17 8 views
1

大丈夫に応答しない、私は-Cをobjと新しいです知っているが、それは動作するはずのようにすべての意図や目的のために下に次のようだ:NSMutableArrayのはobjectAtIndexセレクタ

songCollection = [[NSMutableArray alloc] init]; 
    [songCollection addObject:@"test"]; 
    //Array is init, and I can see it in the debugger. 
    songCollection = [GeneralFunctions getJSONAsArray:@"library"]; 
    // I can see the expected data in the debugger after this. 
    [songCollection retain]; 
    NSLog(@"%@", [songCollection objectAtIndex:0]); 
     // Crashes here due to the array not responding to the selector. Also, the array is now empty. 
    //NSLog(@"%@", songCollection); 
    NSArray * songList = [songCollection objectAtIndex:1]; 
    NSLog(@"%@", songList); 

私は誰かができます願っています私をここに助けて、私は壁に頭を叩いている!

答えて

8

songCollectionはもともとNSMutableArrayでしたが、[GeneralFunctions getJSONAsArray:@"library"]から返されたもので上書きしました。それが何であれ、おそらく配列ではありません。

ちなみに、ここでは配列が漏れています。

+0

とNSMutableArrayのにNSArrayのを変換することができ、あなたが把握と仮定:[GeneralFunctions getJSONAsArray:@ "library"]]配列を完全に置き換える代わりに、 getJSONAsArray:関数は配列ではないので、その行は失敗します。結果はまだNSMutableArrayです。 –

+0

ここに問題がありますが、関数getJSONAsArrayにNSArrayを返すように指示していますが、デバッガはNSCFDictionaryオブジェクトを返します。 – WedTM

+0

そして、以前の応答で私自身の質問に答えました。 Fro私が使用しているJSONライブラリは、できるだけディクショナリを返すことを知っていて、Arrayにフェイルバックするのに十分な知能があります。 グレー... ありがとうございました! – WedTM

1

[GeneralFunctions getJSONAsArray:@ "library"]は実際にNSArrayを返しますか?

また、その行で再割り当てする前に、songCollectionをリリースすることを忘れてしまいます。

7

コードを段階的に分割できます。

songCollection = [[NSMutableArray alloc] init]; 

新しい空のNSMutableArrayを割り当てます。

[songCollection addObject:@"test"]; 

NSMutableArrayのsongCollectionに「テスト」@ NSStringのを追加します

songCollection = [GeneralFunctions getJSONAsArray:@"library"]; 

あなたが作成した可変配列(したがって、メモリリーク)をご参照を捨てて、あなたにそのあなたに何かに新しい指針を与えますまだ所有していない

[songCollection retain]; 

あなたはsongCollectionの所有権を取得します。これが動作するので、getJSONAsArrayがnilまたはNSObjectのいずれかを返すことがわかります。

したがって、明らかにsongCollectionはnilでもなく、NSArray(可変またはその他)でもありません。 GeneralFunctions getJSONAsArrayのドキュメントまたは署名をチェックし、実際に返される内容を確認してください。

//NSLog(@"%@", songCollection); 

実際にどのようなsongCollectionが表示されるのでしょうか。

あなたは[songCollection addObjectsFromArrayを言いたいかもしれないgetJSONAsArrayはNSArrayのを返すされていない理由、あなたは

songCollection = [[GeneralFunctions getJSONAsArray:@"library"] mutableCopy]; 
// You now own songCollection 

または

songCollection = [[NSMutableArray alloc] init]; 
// You now own songCollection 
[songCollection addObjectsFromArray:[GeneralFunctions getJSONAsArray:@"library"]; 
関連する問題