Вы не можете делать назначения внутри интерфейса класса .
Переместите назначение в метод init
делегата приложения:
#import <UIKit/UIKit.h>
@interface TestRunAppDelegate : NSObject <UIApplicationDelegate> {
UITableView *mainTable;
}
@end
@implementation TestRunAppDelegate
- (id)init {
if( !(self = [super init]) ){
return nil;
mainTable = [[UITableView alloc] init];
return self;
}
@end
Блок @interface
(все от @interface
до @end
) просто говорит другому коду, что ожидать от вашего класса. Он ничего не делает сам по себе. Между фигурными скобками вы объявляете переменные экземпляра, но на самом деле не создаете никаких объектов. После объявления переменной экземпляра и до @end
вы объявляете свои методы. Опять же, вы их не реализуете. Вы просто позволяете компилятору и любому другому коду, импортирующему ваш заголовок, знать, что они могут ожидать от вашего класса.
Причина разделения реализации и интерфейса таким образом * заключается в реализации одного из принципов объектно-ориентированного программирования. Объект по существу сообщает другим объектам, что он может сделать (интерфейс), но не делает никаких заявлений относительно того, как он выполнит задачу (реализацию).
* Они обычно помещаются в два отдельных файла, но на самом деле не имеют .