Неизвестное имя типа в объективе c
Я новичок в объективе c и имею некоторые основные проблемы.
Я написал простую программу с помощью навигатора, и все сработало нормально.
то я добавил несколько строк кода (даже не могу вспомнить, что именно, и похоже, что у него нет связи с проблемой), и возникла проблема. Я попробовал ctrl + z, и проблема осталась:
Я запускаю программу и получаю следующие ошибки:
1. unknown type name "mainController"
2. property with 'retain (or strong)' attribute must be of object type
а mainController - первый загружаемый экран.
Это файл 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
это соответствующая часть файла 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;
}
И это 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
он уже работал...
вы можете понять это?
спасибо
Ответы
Ответ 1
Эта проблема случается со мной однажды.
Я импортировал "APPDelegate.h" в свой h файл и в моем APPDelegate.h Я также импортировал файл (это не должно быть проблемой, но...)
Что я сделал: я изменил Импорт из моего собственного .h в .m, и он сработал:)
Ответ 2
Я понял, что та же ошибка появляется, если у вас есть цикл импорта:
Class_A.h: #import "Class_B.h"
Class_B.h: #import "Class_A.h"
Исправить: искать какие-либо импорции класса-нарушителя (вкладка "Ошибка" - ваш друг, развернуть соответствующую ошибку для списка импорта). Удалите #import
соответственно
Ответ 3
Как отмечали другие, это действительно вызвано циклическим импортом. Чтобы исправить это, удалите импорт в одном из классов. Но иногда этого недостаточно. Если классы зависят друг от друга, просто перетащите один класс в другой:
Класс A:
#import <UIKit/UIKit.h>
@class B; //<- this is essential here
@interface A: NSObject
@property(nonatomic, strong) B *b;
//...
В классе B мы имеем:
#import "A.h"
@interface B: NSObject
@property(nonatomic, strong) A *a;
Ответ 4
Проверьте цель и файлы, которые она компилирует. Возможно, у mainController есть некоторые способы удаления из этой цели. Если да, то при создании вы получите сообщение о том, что его невозможно найти.
Ответ 5
@JustAStranger и @NathanielSymer, оба правильны!
В любом случае стоит помнить, что этот случай, приведенный ниже, также имеет такую же проблему:
Class_A.h: #import "Class_B.h"
Class_B.h: #import "Class_C.h"
Class_C.h: #import "Class_A.h"
Эта проблема показывает нам, насколько важно заботиться о владельцах в наших отношениях с Классами. Очень легко создавать проблемы цикла с использованием заголовков ObjC.
Ответ 6
Эта проблема выглядит как опечатка, потому что имена классов обычно начинаются с символа верхнего регистра. Поэтому mainController может/должен быть MainController. Проверьте имя класса, чтобы узнать, действительно ли ошибка является опечаткой, потому что компилятор говорит вам, что не может найти класс, называемый mainController.