2011-04-22 10 views
21

Tengo una instancia de MyViewController en la vista de detalles de UISplitViewController. Estoy ejecutando una prueba unitaria para ver si la vista detallada contiene el tipo correcto de vista.isKindOfClass: devuelve falso negativo en el paquete de prueba de unidades

I probar el tipo de controlador en la unidad de prueba con lo siguiente:

[controller isKindOfClass:[MyViewController class]]; 

Sin embargo, el método isKindOfClass siempre devuelve NO

Cuando po el objeto en el depurador consigo el siguiente:

(gdb) po controller 
<MyViewController: 0xb31c4d0> 

También he probado el método isMemberOfClass: produce los mismos resultados. ¿Alguien puede explicar por qué esto sucederá?

EDIT: Así que después de leer el artículo publicado por Nick Weaver me di cuenta de que estaba incluyendo los archivos fuente de mi aplicación en la fase de compilación de las fuentes de compilación del paquete de prueba. Esto también se indica en el registro haciendo declaraciones similares al siguiente:

Class MyViewController is implemented in both /Users/jdoe/Library/Application Support/iPhone Simulator/4.3.2/Applications/670A077A-BAD8-4FA6-945A-851F33114CF5/MyApp.app/MyApp and /Users/jdoe/Library/Developer/Xcode/DerivedData/MyApp-drxyfejeattjwgantzesgensnlnx/Build/Products/Debug-iphonesimulator/MyAppTests.octest/MyAppTests. One of the two will be used. Which one is undefined. 

Sin embargo, cuando quito los archivos de origen a partir de fuentes de compilación del lote de prueba fase de construcción, me gustaría tener un error de vinculador que se parece a lo siguiente:

Undefined symbols for architecture i386: 
"_OBJC_CLASS_$_MyViewController", referenced from: 
    objc-class-ref in _MyViewControllerTests.o 
(maybe you meant: _OBJC_CLASS_$__MyViewControllerTests) 
+0

¿Esto se comporta de la misma manera durante el tiempo de ejecución no en la prueba? –

+0

Por lo que puedo ver, no lo hace – nduplessis

Respuesta

12

Como mencioné en mi pregunta, me di cuenta de que estaba incluyendo incorrectamente los archivos de origen de la aplicación en la fase de compilación de las fuentes de compilación del paquete de prueba. Después de la eliminación de los archivos de origen de esta fase de construcción He resuelto el error de vinculador de los símbolos que faltan al cambiar los símbolos ocultos por acumulación de configuración predeterminada como "No" para la configuración de depuración

Xcode build settings

Esto solucionó el error enlazador y quería decir que ya no estaba incluyendo archivos de origen duplicados


Nota: también, asegúrese de ajustar el "Target Host" para el destino de la prueba en la pestaña Info de Xcode lo que va a tirar de las fuentes de compilación de allí

0

Tuve el mismo problema con una de mis aplicaciones, lo solucioné al eliminar el archivo .m del objetivo de prueba. En su caso, eliminar MyViewController.m del objetivo de prueba solucionará su problema. Abra su archivo .m. Vaya al navegador de la derecha en Xcode y elimine la marca de la Membresía objetivo para el objetivo de prueba. El problema es que el compilador compila dos MyViewController.m (uno para la aplicación uno para la prueba) y .class puede devolver un objeto diferente.

Cuestiones relacionadas