2011-10-07 2 views
29

__NSArrayIおよび__NSArrayMとは何ですか?__NSArrayIおよび__NSArrayMとは何ですか?どのようにNSArrayに変換するには?

__NSArrayI(またはM)が原因で「認識できないセレクタ」エラーが発生します。

どのようにNSArrayを変換するのですか?


私はjson、twitter apiを解析するためにテストを行いました。

http://api.twitter.com/1/followers/ids.json?cursor=-1&screen_name=twitterapi

は==>正常に動作します。解析されるオブジェクトはNSCFDictionaryクラスです。 は

http://api.twitter.com/1/statuses/user_timeline.json?&screen_name=twitterapi

==>エラー(この辞書は__NSArrayMクラスが含まれています)。解析されたオブジェクトは__ NSArrayMクラスです。

+2

ポストあなたにエラーを与えるコード:

ここでは、両方の短い検索を見ることができます。 – Vladimir

+2

__NSArrayI =>変更不能なNSArray __NSArrayM =>変更可能なNSArray –

+1

未確認のセレクタメッセージも投稿してください。 – JeremyP

答えて

70

__NSArrayIは不変の配列のためのコードワードである - つまり、「通常の」NSArrayましたあなたは変更することはできません。

__NSArrayMは、可変配列のコードワードです。つまり、NSMutableArrayです。 NSMutableArrayでは、アイテムの追加や削除ができます。

+7

ニース - この知識はどこにありますか?ランタイムのソースを直接読むだけで?あるいは、ある種のドキュメントがどこかにあります。 – sean

+2

名前は良い手がかりです(配列の文脈では "M"と "I"はあまり意味はありませんが、可変で不変です)が、最も良い方法はobject_getClass()を使ってNSArraysであることを知ることです。 –

+0

@Catfish_Man six –

1

プライベートクラスです。あなたはそれらにアクセスしたり、それらを変換したくないはずです。

私が間違っていない場合、NSArray_NSArrayのサブクラスです。

あなたはそれが可変タイプであることに/ご使用のアレイのチェックからいくつかのオブジェクトを削除/追加する場合:NSMutableArray

4

これらはプライベートAPIのクラスです。 is a projectここでプライベートAPIのすべてのクラスを見ることができます。あなたはapp storeのためのアプリの中でそれらを使用することは許されませんが、オブジェクトにアクセスする方法とそれがどんな種類のオブジェクトであるかを見るのも便利です。彼らは改宗することができません。私は、デバッガ内部でこの種のオブジェクトを取得することは、プロジェクト内で使用しているクラスの内部クラスの表現に過ぎないと思います。どのような種類のクラスであるかを知ることで、コード内で問題を探す場所を理解することもできます。

__NSArrayI

enter image description here

__NSArrayM

enter image description here

関連する問題