Что такое __NSArrayI и __NSArrayM?Как конфертировать в NSArray? - PullRequest
32 голосов
/ 07 октября 2011

Что такое __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.

Ответы [ 3 ]

76 голосов
/ 07 октября 2011

__NSArrayI - это кодовое слово для неизменяемого массива, то есть «обычный» NSArray, который вы не можете изменить.

__NSArrayM - это кодовое слово для изменяемого массива -то есть NSMutableArrayNSMutableArray вы можете добавлять и удалять элементы.

5 голосов
/ 10 апреля 2015

Это классы приватного API. Там есть проект , где вы можете увидеть все классы приватного API. Вам не разрешено использовать их внутри приложения для app store, но иногда полезно также посмотреть, как получить доступ к объектам, а также к какому типу объектов это относится. Они не могут быть преобразованы. Я думаю, что получение таких объектов внутри отладчика - это просто представление внутренних классов для классов, которые вы используете внутри своего проекта. Зная, что это за класс, вы также сможете понять, где искать проблему в вашем коде.

Здесь вы можете увидеть краткий обзор обоих:

__ NSArrayI

enter image description here

__ NSArrayM

enter image description here

2 голосов
/ 07 октября 2011

Это частные занятия. Вы не должны хотеть получать к ним доступ или, кроме того, конвертировать их.

Если я не ошибаюсь NSArray является подклассом _NSArray.

Если вы добавляете / удаляете некоторые объекты в / из массива, проверьте, что он имеет изменяемый тип: NSMutableArray

...