2011-08-05 10 views
20

He estado buscando a través de innumerables mensajes acerca de este error:.

Undefined symbols: 
"_OBJC_CLASS_$_BoxView", referenced from: 
    objc-class-ref-to-BoxView in ViewMovingViewController.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

BoxView es una subclase de UIView, y el marco UIKit se ha incluido BoxView.h ha sido importado en el . ViewController

El ViewController contiene este código:

-(void) addBoxViewAtLocation:(CGPoint)point { 
    CGRect rect; 
    rect.origin.x = point.x; 
    rect.origin.y = point.y; 
    rect.size.width = 80; 
    rect.size.width = 40; 
    BoxView *newView = [[BoxView alloc] initWithFrame:rect]; 
    newView.backgroundColor = [UIColor yellowColor]; 
    [mainView addSubview:newView]; 
} 

Y BoxView contiene este código:

- (id)initWithFrame:(CGRect)frame {  
    self = [super initWithFrame:frame]; 
    if (self) { 
     // no further initialization 
    } 
    return self; 
} 

Esta es la línea que está causando el error, el código anterior:

BoxView *newView = [[BoxView alloc] initWithFrame:rect]; 

Cuando cambio BoxView a UIView en esa línea, el error desaparece. ¿Alguien sabe lo que necesito cambiar aquí? He revisado muchas publicaciones sobre esto, pero la mayoría de las respuestas dicen que está relacionado con el enlace, pero he intentado marcar y desmarcar ciertas cajas sin éxito. Me pregunto si el error está en mi código. ¡Cualquier sugerencia sera apreciada!

Respuesta

42

En general, esto ocurrirá cuando el código para BoxView no se está compilando correctamente en su destino.

identity editor screenshot

es necesario asegurarse de que el objetivo está la construcción tiene su caja correspondiente comprueba su archivo BoxView.m aplicación. Su pregunta sugiere que ha intentado esto, pero aquí hay una captura de pantalla (de Xcode 4) solo por cuestión de claridad.

A 'Clean and Build' nunca duele, tampoco.

+0

Gracias, sin duda trató la generación limpia, pero no han llegado a través de una casilla de verificación para BoxView.m .. ¿Dónde podría encontrar que Tickbox? Estoy mirando a través de la configuración de compilación, pero no lo veo. Estoy trabajando con una versión anterior de X-Code, X-Code 3, así que no creo que mi versión se ajuste a la captura de pantalla que envió – cms

+0

Oh de hecho, acabo de encontrarlo. No sé si es el caso en Xcode 4 pero en Xcode 3 puedes literalmente arrastrar y soltar el archivo .m en el destino – cms

+1

A veces, cuando agrego archivos a proyectos, no se compilan cuando se construye el proyecto. En Xcode 4, los agrego explícitamente en "Fases de compilación" -> "Compilar fuentes". Por qué estos no están configurados (a veces) de manera predeterminada, no lo sé. – wcochran

1

Solo quiero agregar que la respuesta de Ben Mosher es totalmente correcta. Pero hay otra forma de incluir los archivos para compilar en la configuración de Destino.

enter image description here

+1

funciona de manera muy similar en Xcode 7, pero accede a 'Linked Frameworks and Libraries' desde la pestaña' General' para un objetivo seleccionado determinado. – ecoe

Cuestiones relacionadas