【问题标题】:UITableViewController being initialised twiceUITableViewController 被初始化两次
【发布时间】:2012-02-16 21:02:37
【问题描述】:

我试图以模态方式呈现 UINavigationController 和 UITableViewController 作为它的根视图,但在按下按钮以呈现模态视图时,应用程序不断崩溃。

- (IBAction)flipToDefaultsViewController:(id)sender
{

    RootTableViewController *controller = [[RootTableViewController alloc] initWithNibName:@"RootTableViewController" bundle:nil];

    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:controller];
    nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

    [self presentModalViewController:nc animated:YES];
}

应用程序崩溃并显示消息:

[RootTableViewController numberOfSectionsInTableView:]:消息发送到释放实例0x5677b5

当我加载 Instruments 以进一步查看时,很明显创建了我的 UITableViewController 的两个实例,一个是 UINavigationController 的所有者,另一个是 UIKit。 UIKit 创建的实例是被释放并导致崩溃的实例。

当我将初始化从 initWithNibName:bundle: 更改为 init 时,UITableViewController 加载正常(我的 .xib 文件与类同名)。

我的问题是为什么会发生这种情况?

在将UITableViewController 添加到 UINavigationController 时,您是否应该不以这种方式初始化它?到目前为止,我一直在搜寻文档,但没有任何乐趣。

使用带有 ARC 的 iOS 5,但目标部署是 4.0。

【问题讨论】:

    标签: ios initialization automatic-ref-counting


    【解决方案1】:

    我还没有弄清楚为什么对象被初始化了两次,但是我确实查看了我用来创建 .xib 文件的步骤,看起来复制一个从 Storyboard 到 Interface Builder 的视图。事后看来,这是有道理的,但由于视图似乎可以毫无错误地复制,并且其他一切看起来都不错,所以很容易完成。

    others 与类似的results 似乎遇到了类似的问题。

    通过使用 nib 文件 (⌘-N) 创建一个完全干净的 UITableViewController 子类并将代码从初始类复制到新类中,我可以使用上面的初始代码来分配/初始化我的模态视图.

    顺便说一句,我在开篇文章中误认为使用 init 时正确加载了 nib 文件。事实并非如此,事实上UITableViewController apparently 不会发生这种行为,因为其他类名称与 .xib 文件相同的类将首先尝试加载 .xib。

    【讨论】:

    • 同样的事情也发生在我身上,并且非常难以追查。您的评论为我节省了更多时间的挫败感!
    • 在启用 ARC 的项目中,将视图从情节提要复制到 .xib 会导致应用程序崩溃。当我推送视图时,副本中的某些内容会减少我的视图引用计数。
    【解决方案2】:

    如果这是一个按钮,那么当按钮被按下时,你不应该初始化任何东西。您应该事先进行初始化,并在按下按钮时简单地显示modalViewController。

    有什么原因导致rootViewController和导航控制器在appdelegatedidFinishLaunchingWithOptions方法中无法初始化?

    【讨论】:

    • 但您肯定不想在对象被使用之前就对其进行初始化,并且有可能永远不会使用它???
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2019-06-04
    • 2015-03-06
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多