2011-01-06 8 views
11

Tengo una biblioteca donde recibo NSConcreteValue y no tengo ni idea de cómo manejarlo. Sé que el objeto que se supone que debo obtener es un booleano, entonces, ¿cómo puedo extraer el valor real?¿Qué es un NSConcreteValue y cómo extraigo su valor?

+1

¿Cómo sabe que se obtiene NSConcreteValue? Según este enlace, http://lists.apple.com/archives/cocoa-dev/2003/Oct/msg00096.html puede ser una subclase privada de la clase NSValue. Intente verificar eso (como se describe en el enlace). Intente también registrar NSLog (@ "% s", [su objCTypeConcretoValue]) para ver exactamente qué tipo está almacenado en ese objeto – Vladimir

Respuesta

12

Esa es una clase privada que a veces (¿o todas las veces?) Se usa detrás de las escenas cuando trabajas con NSValue. O al menos esa es mi impresión. Creo que debería ser capaz de lanzar a NSValue:

// assuming value is of type “id” 
NSAssert([value isKindOfClass:[NSValue class]], 
    @"Sorry, I was wrong. Maybe try anyway?"); 
NSAssert(strcmp(@encode(BOOL), [value objCType]) == 0, 
    @"The value does not seem to hold a BOOL."); 
BOOL unwrappedValue; 
[value getValue:&unwrappedValue]; 

... o algo así, estoy haciendo esto :-)

+0

+1 excelentes ejemplos del uso de NSAssert para verificar el tipo de clase y valor. (aunque probablemente no sea necesario hacer el reparto a 'NSValue' - solo use' -getValue: ') –

+0

Tiene razón, estoy seguro de que no obtiene el valor como' NSConcreteValue'. Lo más probable es que obtenga un 'id' de una colección o algo así, voy a editar la respuesta. – zoul

Cuestiones relacionadas