2

我有下一个代码:

- (void)func
{
    MyViewController *ctrl = [MyViewController new];
    [ctrl doSmth];
    [self presentViewController:ctrl animated:NO];
}

//------------

- (void)doSmth
{
    CGRect *rect = self.view.frame;
    // Do something with rect
    self.view.frame = rect;
}

好的,我知道,当-[UIViewController view]等于时,nil它正在被创建。这段代码在我更改之前确实有效(只有按钮和标签可见性,没什么特别的),现在它抛出SIGABRTself.view,看起来它无法创建。突然。如果我恢复我的更改,一切都会像魔术一样工作。即使我不调用此函数,它也会在呈现时崩溃,并且在摘要中它会显示view = 0x00000000.

我只有一个问题:WAT?

4

1 回答 1

0

我发现了错误。

在 XCode 的“重构”(重命名一些IBOutlets)之后,旧的网点已经被标记!但没有被删除,XCode 没有告诉我任何关于它的信息。

我所说的!-s 是Interface Builder 用图标显示无效的插座。无效出口意味着您在视图和不存在的属性/实例变量之间建立了连接。所以当NIB将在运行时加载时,应用程序会崩溃,因为没有这样的属性/实例变量。

!-标记在 IB

因此,如果您在此类错误中运行,您应该删除插座,或者将具有相同名称的属性/实例变量添加到您已将 XIB 链接到的类(通常是文件的所有者)。

于 2013-02-22T18:29:41.510 回答