2011-10-07 10 views
29

¿Qué es __NSArrayI y __NSArrayM?¿Qué es __NSArrayI y __NSArrayM? Cómo convertir a NSArray?

__NSArrayI (o M) provocan el error del "selector no reconocido".

Cómo convertir a NSArray?


Hice la prueba para analizar json, twitter api.

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

==> funciona bien. objeto analizado es clase NSCFDictionary. (Este diccionario contiene la clase __NSArrayM)

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

==> error. objeto analizado es __NSArrayM clase.

+2

enviar el código que le da un error. – Vladimir

+2

__NSArrayI => NSArray inmutable __NSArrayM => Mutable NSArray –

+1

También publique el mensaje del selector no reconocido. – JeremyP

Respuesta

70

__NSArrayI es una palabra en clave para una matriz inmutable - es decir, un "regular" NSArray cuales no puedes cambiar

__NSArrayM es una palabra de código para una matriz mutable, es decir, NSMutableArray. En NSMutableArray, puede agregar y eliminar elementos.

+7

Bien, ¿dónde encuentras este conocimiento? ¿Simplemente leyendo directamente la fuente del tiempo de ejecución? O hay algún tipo de documentos en alguna parte. – sean

+2

Los nombres son una buena pista ("M" e "I" en el contexto de matrices no podían significar mucho pero mutables e inmutables), pero la mejor manera es inspeccionar objetos que sabe que son NSArrays utilizando object_getClass(). –

+0

@Catfish_Man six –

1

Es clases privadas. No debería querer acceder a ellos o, además, convertirlos.

Si no me equivoco NSArray es la subclase de _NSArray.

Si va a añadir/eliminar alguno de los objetos a/de su cheque de matriz que es de tipo mutable: NSMutableArray

4

Estas son las clases de la API privada. Hay is a project donde puedes ver todas las clases de la API privada. No está permitido usarlos dentro de una aplicación para el app store, pero a veces también es útil ver cómo acceder a los objetos y también qué tipo de objeto es. No pueden ser convertidos. Creo que obtener este tipo de objetos dentro del depurador es solo la representación de clases internas, para las clases que está utilizando dentro de su proyecto. Saber qué clase de clase es, le permite también entender dónde buscar el problema dentro de su código.

Aquí se puede ver un resumen de búsqueda de ambos:

__NSArrayI

enter image description here

__NSArrayM

enter image description here