Nombre de tipo desconocido en Xcode (incluso con la statement @class)

Tengo problemas con una aplicación simple para configurar un controller de datos. Obtengo un error en la línea @property (strong, nonatomic) BirdsListDataController *dataController; en BirdsListViewController.h. Hice mi mejor esfuerzo para usar una statement @class de BirdsListDataController, así como para tratar de eliminar cualquier statement #import de los files .h y traté de eliminar un #import circular que se puede encontrar comentado en la parte superior de BirdsListViewController. marido. Supongo que es algo simple.

BirdsListViewController.h

 #import <UIKit/UIKit.h> @class BirdsListDataController; @interface BirdsListViewController : UITableViewController <UITextFieldDelegate> { // NSMutableArray *listOfBirds; IBOutlet UITextField *addNewBirdTextField; } //@property (nonatomic, retain) NSIndexPath *checkedIndexPath; @property (nonatomic, retain) NSString *textLabelContents; @property (nonatomic, retain) NSMutableArray *workingArray; @property (strong, nonatomic) BirdsListDataController *dataController; @property (strong, nonatomic) IBOutlet UITableView *birdListTableView; @end 

BirdsListViewController.m

 #import "BirdsListViewController.h" #import "BirdsListDataController.h" @interface BirdsListViewController () @end @implementation BirdsListViewController - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { ... 

BirdsListDataController.h

 #import <Foundation/Foundation.h> @class BirdName; @interface BirdsListDataController : NSObject @property (nonatomic, copy) NSMutableArray *listOfBirds; -(NSUInteger)countOfList; -(BirdName *)objectInListAtIndex:(NSUInteger)theIndex; -(void)addBirdNameWithName:(BirdName *)bName; @end 

BirdsListDataController.m

 #import "BirdsListDataController.h" //#import "BirdsListViewController.h" #import "Bird.h" @implementation BirdsListDataController -(id)init {... 

Todavía soy muy nuevo en iOS y en Objective C, así que espero que mi código no sea demasiado horrible para solucionar problemas. Gracias por la ayuda.

No estoy seguro de qué está causando tu problema, pero algunas cosas:

  • En el código que ha presentado, no hay ninguna razón para no importar BirdListDataController.h en BirdListViewController.h, ya que no hay reference a BirdListViewControllers en BirdListDataController.h. Entonces intente replace su statement de @class con una statement de #import.

  • En BirdListDataController.h declaras @class BirdName, pero en BirdListDataController.m importas Bird.h en lugar de BirdName.h. Parece que algo podría estar mal allí, aunque tendría que ver el código para BirdName.h y Bird.h saberlo con certeza.

Para las personas que buscan una mejor respuesta que comentar o descomentar su código, una mejor solución es limpiar su proyecto y eliminar sus datos derivados. Una vez que haya corregido sus references circulares, la pulsación de tecla Command+Shift+K limpiará su proyecto, o puede ir y seleccionar Product->Clean .

Para eliminar sus datos derivados, abra Organizador, click la pestaña Proyectos, navegue hasta su proyecto en la barra lateral. Debería ver "Datos derivados" en el encabezado del nombre del proyecto. A la derecha de eso debería haber un button que dice borrar. Si está habilitado, la eliminación de los datos derivados también puede eliminar los errores colgantes.

Como forma de explicación, a veces parece que Xcode se desincroniza con un proyecto, aferrándose a errores que ya no existen. Esto es mejor en la versión más reciente, pero aún sucede de vez en cuando.

En mi caso, tenía nombres de classs duplicates en la estructura de carpetas diferentes. Una vez que eliminé la nueva class y la nombré de manera diferente, todo volvió a funcionar.

Entonces, para traducir esto en una solución práctica, según el comentario de "shA.t":

si comenta / descomenta su código, o limpia el proyecto como se indicó anteriormente, las respuestas sugieren pero aún así no lo resuelve:

  1. dar un paso para mirar hacia atrás en los cambios de classs recientes y verificar dos veces todos los nombres de las classs son únicos incluso si están en diferentes directorys,

    el centro comercial

  2. si se encuentra un nombre de class duplicado: haga una copy de security de ese código, elimine esa class (no solo la reference, sino también la basura)
  3. Cree una nueva class con un nombre único e incorpore el código respaldado.

Para este escenario de nombre de class duplicado en particular, esto le ahorrará la molestia de importar y comentar su #import "class.h"