Question

Je suis assez nouveau pour objectif c, et ayant des problèmes de base.

J'ai écrit un programme simple à l'aide d'un navigateur, et tout a bien fonctionné. puis j'ai ajouté quelques lignes de code (ne peut pas se rappeler exactement ce même, et il semble avoir aucun lien avec le problème) et le problème est survenu. J'ai essayé ctrl + z, et le problème demeure:

Je lance le programme et obtenir ces erreurs:

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

lorsque mainController est le premier écran à charger.

Ceci est le fichier 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

est la partie pertinente du fichier 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;
}

Et voici 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

il a déjà travaillé ...
pouvez-vous comprendre?

Merci

Était-ce utile?

La solution

Ce problème arrive à moi une fois.

je l'importation de la « APPDelegate.h » dans mon dossier h et dans mon APPDelegate.h j'importer trop le fichier (il ne devrait pas être un problème, mais ...)

Ce que je l'ai fait: je l'ai changé l'importation de mon propre .h .m et cela a fonctionné:)

Autres conseils

Je compris, que la même erreur apparaît si vous avez un cycle d'importation:

Class_A.h: #import "Class_B.h"

Class_B.h: #import "Class_A.h"

Pour résoudre: recherchez les importations de la classe incriminée (l'onglet d'erreur est votre ami, développez l'erreur correspondant à une liste des importations). Supprimer #import est donc

Comme d'autres l'ont mentionné, cela est en effet causé par les importations cycliques. Pour résoudre ce problème supprimer les importations dans l'une des classes. Mais parfois, cela ne suffit pas. Si les classes dépendent les uns des autres, simplement en avant-déclarer une classe dans l'autre:

Classe A:

#import <UIKit/UIKit.h>
@class B; //<- this is essential here

@interface A: NSObject

@property(nonatomic, strong) B *b;
//...

Dans la classe B, nous avons:

#import "A.h"
@interface B: NSObject

@property(nonatomic, strong) A *a;

@JustAStranger et @NathanielSymer, les deux sont corrects!

Quoi qu'il en soit, d'une valeur se rappeler que ce cas, ci-dessous, a le même problème aussi:

Class_A.h: #import "Class_B.h"

Class_B.h: #import "Class_C.h"

Class_C.h: #import "Class_A.h"

Ce problème nous révèle combien il est important de prendre soin de propriétaires à nos relations de classe. Est crée très facile problèmes de cycle en utilisant les en-têtes ObjC.

Vérifiez la cible et les fichiers qu'il compile. Peut-être mainController a une certaine façon été retirée de cette cible. Dans ce cas, lors de la construction, vous obtiendrez le message qu'il ne peut pas être trouvé.

Ce problème ressemble comme une faute de frappe, car les noms de classe commencent généralement avec un caractère majuscule. Par conséquent, mainController pourrait / devrait être MainController. Vérifiez le nom de la classe pour voir si l'erreur est en effet une faute de frappe, parce que le compilateur vous dit qu'il ne peut pas trouver une classe appelée mainController.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top