2013-04-21 113 views
2

我在设备上安装了应用的旧版本。在我的新版本中,我不再使用.xib文件,因为它从复杂事物变为表视图,我可以在代码中实例化它。使用.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

也许,我发现了一个bug?

另一种选择是让我将这个类重新命名为SomeController之类的东西,以避免自动加载关联的.xib文件。

回答

2

苹果已经在以下技术说明有关测试iOS应用更新解决了这个问题:

Technical Note TN2285

+1

摘要:使用Xcode构建和运行应用程序只发送已更改的文件,吃了一个“frankenbuild”。使用Adhoc构建进行测试。 – 2013-07-08 13:15:07

+0

谢谢!我最近阅读了一些关于在发布之前测试adhoc构建的必要性的帖子,以确保处理各种问题。添加到我的测试清单中。 – Christopher 2013-07-09 01:08:19

+0

很高兴我能帮到你。我在搜索测试构建的方法时遇到了这一段文档,以便我可以避免出现同样的问题。 – 2013-07-09 02:59:42

1

两个recommandations:

  • 您是否尝试过重新启动Xcode和您使用您的测试设备? (我有一个长时间的Xcode记录搞乱了缓存管理并继续使用旧版本的文件)
  • 你确定你的XIB文件没有被另一个引用吗? (也许是你的主要观点有你离开你删除的厦门国际银行的名称的标签栏控制器)
+0

问题是应用程序中的设备上已存在.xib(在清单中)。清理,重建,重新启动,NEW更新没有帮助。问题不在于现有应用程序中存在.xib。这就是说,initWithStyle方法仍然试图自动加载@“SomeViewController.xib”(自动关联 - iOS 5或6的东西?) – Christopher 2013-04-22 01:38:34

+0

此外,我做了一个'grep'整个项目和SomeViewController.xib是不存在的。但它在设备上的旧应用程序中。我应该注意到我正在从SVN重新创建旧应用程序。我从设备中删除了应用程序,重新构建了旧应用程序,然后重新安装以验证问题。 – Christopher 2013-04-22 01:45:39

+0

你是否grep“SomeViewController。xib“或者”SomeViewController“? – 2013-04-22 08:47:10