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


person ChangUZ    schedule 07.10.2011    source источник
comment
Разместите код, который выдает ошибку.   -  person Vladimir    schedule 07.10.2011
comment
__NSArrayI = ›Неизменяемый массив NSArray __NSArrayM =› Изменяемый массив NSArray   -  person Totumus Maximus    schedule 07.10.2011
comment
Также опубликуйте нераспознанное сообщение селектора.   -  person JeremyP    schedule 07.10.2011


Ответы (3)


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

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

person Jason    schedule 07.10.2011
comment
Приятно - где ты находишь эти знания? Просто напрямую читая исходный код среды выполнения? Или где-то есть какие-то документы. - person eric; 28.01.2013
comment
Имена являются хорошей подсказкой (M и I в контексте массивов не могут много значить, но являются изменяемыми и неизменяемыми), но лучший способ - проверить объекты, которые, как вы знаете, являются NSArrays, с помощью object_getClass (). - person Catfish_Man; 28.04.2013
comment
@Catfish_Man шесть - person 无夜之星辰; 14.08.2017

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

Здесь вы можете увидеть оба варианта:

__NSArrayI

введите описание изображения здесь

__NSArrayM

введите описание изображения здесь

person Alex Cio    schedule 10.04.2015

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

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

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

person Nekto    schedule 07.10.2011