Что такое __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.
3 ответа
__NSArrayI
кодовое слово для неизменяемого массива, то есть "обычный" NSArray
который вы не можете изменить.
__NSArrayM
кодовое слово для изменяемого массива, то есть NSMutableArray
, В NSMutableArray
Вы можете добавлять и удалять элементы.
Это классы приватного API. Есть проект, где вы можете увидеть все классы частного API. Вы не можете использовать их в приложении для app store
но иногда полезно также посмотреть, как получить доступ к объектам, а также, что это за объект. Они не могут быть преобразованы. Я думаю, что получение таких объектов внутри отладчика - это просто представление внутренних классов для классов, которые вы используете внутри своего проекта. Зная, что это за класс, вы также сможете понять, где искать проблему в вашем коде.
Здесь вы можете увидеть краткий обзор обоих:
__NSArrayI
__NSArrayM
Это частные занятия. Вы не должны хотеть получить к ним доступ или, более того, конвертировать их.
Если я не ошибаюсь NSArray
это подкласс _NSArray
,
Если вы добавляете / удаляете некоторые объекты в / из массива, убедитесь, что он имеет изменяемый тип: NSMutableArray