1

每当我将我的应用程序运行到“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:我在 iOS 6 SDK 上构建,启用了 Apple LLVM 4.1 和 ARC。

更新:来自 IB 的图片添加: 图像1 图2 图3 图4

仍然迷路,如果您需要更多代码,请告诉我。我用一个简单的导航控制器创建了一个新项目,它适用于那个新项目,但不适用于我的。崩溃与模拟器有关。

4

1 回答 1

-1

我认为我找到了一个不再使模拟器崩溃的解决方案。我只通过了第一个视图。这就是我所做的“事情”。如果有人有见解,请让他们分享,希望也能帮助其他人。特别感谢 Carl Veazey 的帮助。

我忘了提到的是,这段代码是在没有 ARC 的 iOS4 时代完成的。当我切换时,发生了很多变化。

按照 Carl 的建议,我查看了 'Build Phases' -> 'Compile Sources' 并查看了 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。进行该更改后,我可以多次运行该程序并且它没有崩溃。

于 2012-09-27T22:41:23.627 回答