每当我将我的应用程序运行到“iPhone 6.0模拟器”中时,我都会遇到这种奇怪的行为。第一次,它将成功运行但第二次,它将崩溃并出现错误:
loaded the "IouView" nib but the view outlet was not set.'
这是可重复的,每隔一次,它会起作用,反之亦然,它会崩溃。这是我的应用程序结构:
在AppDelegate中:
self.iouViewController = [[IouViewController alloc] initWithNibName:@"IouView" bundle:nil];
[iouViewController setIouTableArray:iouTableArray];
navController = [[UINavigationController alloc] initWithRootViewController:self.iouViewController];
[window setRootViewController:navController];
然后,在IouViewController.h中:
@property (strong, nonatomic) IBOutlet UITableView *iouTableView;
直到今天,我总是以编程方式编写我的视图(tableView等)。随着iPhone 5拥有4英寸屏幕,我决定停止与Apple战斗并使用IB和'自动布局'功能。
在我的IouView.xib中,这是结构:
Objects: 'View',
Referencing Outlets: view - File's Owner
Objects: 'View'->'Table View'
Outlets: dataSource - File's Owner
Outlets: delegate - File's Owner
Referencing Outlets: iouTableView - File's Owner
视图中实际上有另一个表视图,但我没有在此处包含它。请帮忙,因为我迷路了如何继续!非常感谢你。
因为我可能没有正确地初始化我的视图控制器,所以把它扔掉那里,我注释掉'loadView'并将其用作init:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
PS:我正在使用Apple LLVM 4.1和ARC启用的iOS 6 SDK上构建。
更新:来自IB的图片添加:
还是迷路了,如果您需要更多代码,请告诉我。我用一个简单的导航控制器创建了一个新项目,它适用于那个新项目但不适用于我的项目。崩溃发生在模拟器上。
答案 0 :(得分:-1)
我发现了一个不会让模拟器崩溃的解决方案。我只通过第一个视图。这是我做的“事情”。如果有人有见解,请让他们分享,并希望也能帮助其他人。特别感谢Carl Veazey的帮助。
我忘了提到的是,这段代码是在没有ARC的iOS4时代完成的。当我切换时,有很多变化。
根据Carl的建议,我看了一下'Build Phases' - > '编译源'并查看IouView.xib。所以,我删除了一个。我运行程序,它显示黑屏。最后,我看了main.m
原件:
@autoreleasepool {
int retVal = UIApplicationMain(argc, argv, nil, nil);
return retVal;
}
并将其更改为:
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([IouApp2AppDelegate class]));
}
我必须#import我的AppDelegate。进行更改后,我可以多次运行该程序,但它没有崩溃。