【问题标题】:Updating app on device with .xib removed crashes app删除 .xib 更新设备上的应用程序会导致应用程序崩溃
【发布时间】:2013-04-21 22:24:43
【问题描述】:

我在设备上安装了旧版本的应用。在我的新版本中,我不再使用 .xib 文件,因为它从复杂的东西变成了一个表格视图,我可以在代码中实例化它。

但是,当我在设备上构建和运行时,它会崩溃,因为它仍然尝试从旧应用程序中包含的 .xib 文件加载控制器,并抱怨 UILabel 缺少键/值对。

例如:

SomeViewController.h (UITableViewController)
SomeViewController.m
SomeViewController.xib(新版本中删除)

SomeViewController *controller = [[SomeViewController alloc] initWithStyle:UITableViewStylePlain];

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];

    if (self)
    {
    }

    return self;
}

即使我调用“initWithStyle”,它仍然会尝试加载预先存在的 .xib!

我目前的解决方案是使用空白 UITableView 创建 SomeViewController.xib。

但我怀疑,当用户从应用商店更新应用时,它会覆盖整个应用,不会留下任何东西。

这是真的吗?应用更新会覆盖现有应用还是留下挥之不去的 .xib 文件?

现在我必须用其他所有视图测试旧版本,以确保没有其他问题挥之不去。

阅读 NIB 上的开发者文本: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

也许我发现了一个错误?

另一个选择是我将类重命名为 SomeController 之类的其他名称,以避免自动加载关联的 .xib 文件。

【问题讨论】:

    标签: ios crash uitableview xib


    【解决方案1】:

    Apple 已在以下有关测试 iOS 应用更新的技术说明中解决了此问题:

    Technical Note TN2285

    【讨论】:

    • 总结:使用 Xcode 构建和运行应用程序只会发送更改的文件,并且可以创建“frankenbuild”。使用 Adhoc 构建进行测试。
    • 谢谢!我最近阅读了一些关于在发布之前测试临时构建以确保处理各种问题的必要性的帖子。添加到我的测试清单中。
    • 很高兴我能帮上忙。我只是在寻找一种测试构建的方法时遇到了这篇文档,这样我就可以避免与您遇到的完全相同的问题。
    • 我们在 TestFlight 构建中看到了这种情况,这是 TestFlight 的一个已知问题吗?我以为它们会完全重新安装。
    【解决方案2】:

    两条建议:

    • 您是否尝试过重新启动 Xcode 和您用于测试的设备? (我长期记录 Xcode 搞乱缓存管理并继续使用旧版本的文件)
    • 您确定您的 XIB 文件没有被其他文件引用吗? (也许您的主视图有一个标签栏控制器,您在其中留下了您删除的 XIB 的名称)

    【讨论】:

    • 问题是 .xib 已经存在于应用程序内的设备上(在清单中)。清理,重建,重新启动,新的更新没有帮助。问题不在于 .xib 存在于现有应用程序中。就是 initWithStyle 方法仍在尝试自动加载 @"SomeViewController.xib" (自动关联 - iOS 5 或 6 的东西?)
    • 另外,我对整个项目做了一个“grep”,而 SomeViewController.xib 不存在。但是,它在设备上的旧应用程序中。我应该注意我正在从 SVN 重新创建旧应用程序。我从设备中删除了该应用程序,重新构建了旧应用程序,然后重新安装以验证问题。
    • 你是 grep "SomeViewController.xib" 还是只是 "SomeViewController" ?
    • 两者。我认为框架存在错误。它尝试在预先存在的应用程序中加载 .xib,但发现插座未连接。无论如何,现在我只是添加了一个 .xib 以便它覆盖现有的。在下一个版本中,我将删除它。
    • 我在另一个 .xib 中遇到了同样的问题。但是,这一次我重新启动了 Xcode 以及模拟器,它似乎工作正常。我以为我上次就这么做了(工作时间太长)。我在模拟器上搭建安装了旧版本,重启Xcode加模拟器,在模拟器上搭建安装新版本,没有出现报错。我只能希望,当二进制文件在 App Store 上分发时,整个二进制文件都会被覆盖,而不会受到旧 .xib 文件的副作用。
    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2022-10-31
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2013-02-20
    • 2021-07-29
    • 2019-02-19
    相关资源
    最近更新 更多