objective-c types delegates navigator

objective c - Nombre de tipo desconocido en el objetivo c



objective-c types (6)

@JustAStranger y @NathanielSymer, ¡ambos son correctos!

De todos modos, vale la pena recordar que este caso, a continuación, también tiene el mismo problema:

Class_A.h: #import "Class_B.h"

Class_B.h: #import "Class_C.h"

Class_C.h: #import "Class_A.h"

Este problema nos revela lo importante que es cuidar a los propietarios en nuestras relaciones de clase. Es muy fácil crear problemas de ciclo utilizando encabezados ObjC.

Soy bastante nuevo en el objetivo c, y tengo algunos problemas básicos.

Escribí un programa simple usando un navegador, y todo funcionó bien. Luego agregué algunas líneas de código (no puedo recordar exactamente qué, y parece que no tiene conexión con el problema) y ocurrió el problema. Intenté Ctrl + Z, y el problema seguía siendo:

Ejecuto el programa y me sale estos errores:

1. unknown type name "mainController" 2. property with ''retain (or strong)'' attribute must be of object type

mientras mainController es la primera pantalla que se carga.

Este es el archivo appDelegate.h:

#import <UIKit/UIKit.h> #import "mainController.h" #import "WishesList.h" #import "Wish.h" @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) IBOutlet UINavigationController *navController; @property (strong, nonatomic) IBOutlet mainController *viewController; // this line creates the errors @property (strong, nonatomic) WishesList *WishesArray; @property (strong, nonatomic) NSIndexPath *temp; @end

Esta es la parte relevante del archivo appDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions { self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; WishesArray = [[WishesList alloc]init]; temp = nil; [self setViewController:[[mainController alloc]init]]; [self setNavController:[[UINavigationController alloc]initWithRootViewController:self.viewController]]; [self.window setRootViewController:navController]; [self.window makeKeyAndVisible]; return YES; }

Y este es mainController.h:

#import <UIKit/UIKit.h> #import "addWishController.h" #import "displayWish.h" #import "WishesList.h" #import "Wish.h" @interface mainController : UIViewController @property (nonatomic, weak) WishesList *list; @property (nonatomic, strong) IBOutlet UITableView *wishTable; - (void)addWish; @end

ya funcionaba ...
¿Puedes averiguarlo?

Gracias


Como otros han mencionado, esto es causado por las importaciones cíclicas. Para solucionar esto, elimine las importaciones en una de las clases. Pero a veces esto no es suficiente. Si las clases dependen unas de otras, simplemente declare una clase en la otra:

Clase A:

#import <UIKit/UIKit.h> @class B; //<- this is essential here @interface A: NSObject @property(nonatomic, strong) B *b; //...

En la clase B tenemos:

#import "A.h" @interface B: NSObject @property(nonatomic, strong) A *a;


Compruebe el destino y los archivos que está compilando. Tal vez mainController tenga algún modo de ser eliminado de ese objetivo. Si es así, al construir, recibirá el mensaje de que no se puede encontrar.


Este problema me pasa una vez.

Estaba importando el "APPDelegate.h" en mi archivo h y en mi APPDelegate.h También estaba importando el archivo (no debería ser un problema, pero ...)

Lo que hice: cambié la Importación de mi propia .h a .m y funcionó :)


Este problema parece un error tipográfico porque los nombres de las clases generalmente comienzan con un carácter en mayúscula. Por lo tanto, mainController podría / debería ser MainController. Verifique el nombre de la clase para ver si el error es realmente un error tipográfico, porque el compilador le está diciendo que no puede encontrar ninguna clase llamada mainController.


Me di cuenta de que el mismo error aparece si tienes un ciclo de importación:

Class_A.h: #import "Class_B.h"

Class_B.h: #import "Class_A.h"

Para solucionarlo: busque cualquier importación de la clase ofensiva (la pestaña de error es su amigo, expanda el error relevante para obtener una lista de importaciones). Elimina los #import en consecuencia