_mainViewController在哪里声明和初始化?
我最近更新了我的IDE的XCode 4.0,看到在Utillity-应用样板代码一个奇怪的变化:_mainViewController在哪里声明和初始化?
首先,MainViewController.h-文件:
#import <UIKit/UIKit.h>
@class MainViewController;
@interface UtilityAppDelegate : NSObject <UIApplicationDelegate> {
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet MainViewController *mainViewController;
@end
问题1:在哪里是首先声明的“mainViewController”?我没有在任何地方找到它。
在* .M-文件有一个
@synthesize mainViewController=_mainViewController;
声明。所以我的第二个问题:“_mainViewController”隐藏在哪里?无法在任何地方找到声明。它来自我猜想的主要* .nib文件。
但还有另一个问题:我没有添加一个UINavigationController到我最近的项目之一,并且不再需要mainViewController。但是,当我删除@property和@synthesize了MainViewController.m/.H的,我不能运行的应用程序了,因为这样的异常:
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key mainViewController.'
发生在该行
int retVal = UIApplicationMain(argc, argv, nil, nil);
在main.m.
Thx寻求帮助。
问题1:
当您使用像这样的声明时,您不需要显式定义属性。
.H
@property (nonatomic, retain) IBOutlet MainViewController *mainViewController;
。米
@synthesize mainViewController=_mainViewController;
问题2:
_mainViewController未隐藏。它指向其在@property声明隐含定义中.H
@synthesize mainViewController=_mainViewController;
这种格式使用的ivar和其他属性来区分mainViewController。它指的是mainViewController。
问题3:
您删除的声明@财产/ @合成用于mainViewController,但它仍然在笔尖文件(IB)的存在。从IB删除它,你应该很好走。
看着你info.plist它应该在那里声明。如果您使用模板创建了应用程序,则由plist配置它。有一些隐式声明由此完成,mainWindow.xib(在我的例子中)包含多个窗口。有appDelegate和viewController的连接,请参阅第二个截图。
截图的最后一行:
这是MainWindow,而不是MainVieWController。 Info.plist正在定义自动加载的NIB。 – 2011-04-08 12:45:21
是的,但在nib文件中存在与应用程序委托和viewController进行的连接。 – 2011-04-08 12:50:18
您遇到的新ABI首次。不再需要为属性实际声明变量。如果您使用@property
和@synthesize
,则会自动为您生成后援伊娃。
您可能会收到KVC错误,因为NIB仍然引用旧的属性。在编译期间你应该看到这个警告。在IB中,查看您的App Delegate;它可能仍然有一个mainViewController的出口,并且你可能还在生成一个MainViewController。你需要从NIB中删除它们。
thx。我有不同语言的两个版本的我的xib文件。其中一个未正确更新。 – Kie 2011-04-08 13:04:51
不支持显式变量的属性在所有平台上都不受支持,顺便说一句。他们似乎在ARM(iOS)和x64上,但不在x86上。 – DarkDust 2011-04-08 13:32:26
谢谢你指出。约旦 – Jordan 2011-04-08 13:51:15