2012-06-13 8 views
5

Screenshots"¿No encuentra la declaración de interfaz para <class>"

estoy teniendo bastante la creación de una categoría en una clase que hice un tiempo difícil. Por lo que he leído, Objective-C te permite crear una categoría en cualquier clase, no solo las de código cerrado. (Honestamente, no tendría sentido de otra manera.)

Por supuesto que puedo agregar los mensajes de categoría al archivo de clase real, pero quiero mantenerlos separados (ya que la categoría es un uso extraordinariamente especial de una clase que se puede usar de manera muy general). Quiero compartir la clase, pero mantener la categoría privada ... de todos modos.

He desglosado la categoría para mostrar el problema. Yo (actualmente) recibo cuatro errores en el mensaje de la primera categoría. El número de errores que recibo en esa línea es directamente proporcional a la cantidad de veces que son referencias, pero no es un aumento uniforme. ¿Alguien sabe lo que podría estar causando esto?

+0

Lo que has escrito me parece correcto. He hecho cosas similares en mi código. Supongo que tal vez este sea otro problema que confunde al compilador. ¿Tiene "ByteCollection.h" un @end apropiado en él, por ejemplo? ¿O hay algo más que podría estar mal con "ByteCollection.h" o cualquier cosa que incluya? – user1118321

+0

No es que yo pueda ver; Xcode no señala nada y yo implemento toda la interfaz. ¿Qué es exactamente lo que dicta un 'apropiado @end'? –

+3

Otra posibilidad es que el compilador no encuentre "ByteCollection.h" cuando lo importe. Si ese archivo está en una carpeta diferente (en el sistema de archivos, no en los "grupos" de la carpeta amarilla de Xcode), es posible que deba configurar rutas de búsqueda en la configuración del proyecto para que pueda encontrarlas. – rickster

Respuesta

6

Su archivo Resources.h, que es importado por ByteCollection.h, importa ByteCollection + words.h. Entonces, cuando ByteCollection + words.h importa ByteCollection.h, esto da como resultado una dependencia circular †. La forma más sencilla de romper una dependencia circular es mover una de las importaciones al archivo de implementación en lugar del encabezado. Parece que esto debería ser posible con Resources.h.

† Usted se estará preguntando, ¿por qué es un problema si tiene una dependencia circular? Bueno, la directiva #import literalmente incluye textualmente el archivo que especifiques, como si hubieras copiado y pegado. También inteligente no incluye un archivo dos veces, porque eso crearía código duplicado. Pero esto significa que cuando el Archivo A dice "Quiero que el Archivo B vaya delante de mí" y el Archivo B dice "Quiero que el Archivo A vaya antes que yo", uno de ellos se decepcionará, y eso lleva a errores como el estás llegando aquí.

+0

Sí, sí importa 'ByteCollection + Words.h', pero he tenido problemas con la inclusión circular antes y nunca más volveré a rascarme la cabeza por ese error. XD No hay problemas circulares de inclusión. Nunca importé 'Resources.h' en ninguna parte de mis archivos fuente. (Solía, pero ya no.) Incluso comenté la importación específica para una buena medida sin ningún efecto. Gracias :) –

Cuestiones relacionadas