web-dev-qa-db-ja.com

__NSArrayIおよび__NSArrayMとは何ですか? NSArrayに変換する方法は?

__NSArrayIおよび__NSArrayMとは何ですか?

__NSArrayI(またはM)は「認識できないセレクター」エラーを引き起こします。

NSArrayに変換する方法は?


Json、Twitter apiを解析するためのテストを行いました。

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

==>正常に動作します。解析されたオブジェクトはNSCFDictionaryクラスです。 (この辞書には__NSArrayMクラスが含まれています)

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

==>エラー。解析されたオブジェクトは__NSArrayMクラスです。

34
ChangUZ

__NSArrayIは不変配列のコードワードです。つまり、「通常の」NSArrayは変更できません。

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

77
Jason

これらはプライベートAPIのクラスです。そこには プロジェクトです があり、プライベートAPIのすべてのクラスを確認できます。アプリ内でapp storeを使用することは許可されていませんが、オブジェクトへのアクセス方法やオブジェクトの種類を確認することも役立つ場合があります。変換できません。デバッガー内でこれらの種類のオブジェクトを取得することは、プロジェクト内で使用しているクラスの内部クラスの表現にすぎないと思います。クラスの種類を知ることで、コード内のどこに問題があるのか​​を理解することもできます。

ここでは両方の短いルックアップを見ることができます:

__ NSArrayI

enter image description here

__ NSArrayM

enter image description here

5
Alex Cio

プライベートクラスです。あなたはそれらにアクセスしたり、さらにそれらを変換したりすべきではありません。

誤解しない限り、NSArray_NSArrayのサブクラスです。

配列にオブジェクトを追加したり、配列からオブジェクトを削除したりする場合は、それが可変タイプであることを確認してください:NSMutableArray

2
Nekto