_mainViewController在哪里声明并初始化?

时间:2011-04-08 12:27:35

标签: iphone xcode4

我最近将我的IDE更新为XCode 4.0,并看到了Utillity-Application样板代码中的一个奇怪的变化:

首先,MainViewController.h-File:

#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-File中有一个

@synthesize mainViewController=_mainViewController;

语句。所以我的第二个问题:“_mainViewController”隐藏在哪里?无法在任何地方找到声明。它以某种方式出现在我猜的主要* .nib文件中。

但还有另一个问题:我确实在我最近的一个项目中添加了一个UINavigationController,不再需要mainViewController了。但是当我从MainViewController.m / .h中删除@property和@synthesize时,由于这个异常,我再也无法运行该应用程序了:

setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key mainViewController.'

发生在这一行

    int retVal = UIApplicationMain(argc, argv, nil, nil);

在main.m。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

看看你info.plist它应该在那里宣布。如果您使用模板创建了应用程序,则由plist配置。这有一些隐式声明,mainWindow.xib(在我的例子中)包含多个窗口。有appDelegate和viewController的连接,请参见第二个截图。

屏幕截图的最后一行:

enter image description here

enter image description here

答案 1 :(得分:0)

您第一次遇到新的ABI。不再需要为属性声明变量。如果您使用@property@synthesize,系统会自动为您生成支持ivar。

您可能收到KVC错误,因为NIB仍然引用旧属性。你应该在编译期间看到关于这个的警告。在IB中,查看您的App Delegate;它可能仍然有一个mainViewController的插座,你可能仍在生成一个MainViewController。您需要从NIB中删除它们。

答案 2 :(得分:0)

问题1:

当您使用这样的声明时,您不需要显式定义属性。

·H

@property (nonatomic, retain) IBOutlet MainViewController *mainViewController;

的.m

@synthesize mainViewController=_mainViewController;

问题2:

_mainViewController未隐藏。它指向mainViewController,它在.h

中的@property语句中隐式定义
@synthesize mainViewController=_mainViewController;

此格式用于区分ivar和其他属性。它指的是mainViewController。

问题3:

您删除了mainViewController的声明@ property / @ synthesize,但它仍然存在于nib文件(IB)中。从IB中删除它,你应该很高兴。