Iphone 应用程序更新仍然指向旧的已删除NIB。如何在不重新安装应用程序的情况下解决此问题?

Iphone 应用程序更新仍然指向旧的已删除NIB。如何在不重新安装应用程序的情况下解决此问题?,iphone,ios,interface-builder,xib,nib,Iphone,Ios,Interface Builder,Xib,Nib,我们有一个已经在app store上运行的应用程序 现在我们计划通过编程方式创建所有视图并删除相应的NIB(XIB)文件来减小应用程序的大小 问题是,即使删除了nib并且没有调用,应用程序的更新版本仍然指向旧nib,出现了类似的问题(此图只是一个示例,整个应用程序中的问题是一致的): 基本上,视图是由IB和代码构建的 到目前为止,我们提出的唯一解决方案是删除并重新安装应用程序,但要求所有用户这样做是不可取的。此外,它还将删除他们本地存储的应用程序数据,这是我们在这里试图避免的主要问题 对于上

我们有一个已经在app store上运行的应用程序

现在我们计划通过编程方式创建所有视图并删除相应的NIB(XIB)文件来减小应用程序的大小

问题是,即使删除了nib并且没有调用,应用程序的更新版本仍然指向旧nib,出现了类似的问题(此图只是一个示例,整个应用程序中的问题是一致的):

基本上,视图是由IB和代码构建的

到目前为止,我们提出的唯一解决方案是删除并重新安装应用程序,但要求所有用户这样做是不可取的。此外,它还将删除他们本地存储的应用程序数据,这是我们在这里试图避免的主要问题


对于上面显示的示例,以下代码用于加载ViewController:

之前(使用nib构建视图时):

现在(当以编程方式构建视图时,导致上述问题):

JFYI,即使
TheNewVC*TheNewVC=[[TheNewVC alloc]initWithNibName:nil bundle:nil]
TheNewVC*TheNewVC=[[TheNewVC alloc]init]替换,问题仍然存在



有什么解决方案不需要重新安装应用程序。我们是否可以通过编程方式删除iOS引用的nib缓存?或者在更糟糕的情况下,要求用户这样做?任何帮助都将不胜感激。

我假设您是在Xcode中运行应用程序的。这不会从应用程序包中清除预先存在的资源。但是,当你通过应用商店安装时,我确信它确实会清理掉你的应用捆绑包,并从顶部解压新版本(因此旧资源会被清理掉..)

如果您想双重确保不加载.xib,只需重命名ViewController类,它将不再加载旧的xib(因为它在应用程序包中查找名为viewcontrollername.xib的文件)


要执行此操作,请转到视图控制器的.h,右键单击视图控制器名称,然后选择重构。

是否删除了nib文件,或者该文件仍然存在于项目中?“但是,当您通过应用商店安装时,我确信它确实会清除您的应用程序包并从顶部解压新版本”-我对此不太确定。是Xcode构建了应用程序,并将所有资源都放在其中。如果它放入缓存数据,设备将使用这些数据。不,当你通过Xcode“运行”一个应用程序时,它只会将新文件直接复制到应用程序包中,所以你最终会得到大量的旧资源。但是,应用商店在“发布”模式下的干净构建将生成一个完全新的.ipa,因此如果资源已被删除,它们将不会出现在应用捆绑包中。随后,当用户从appstore/adhoc安装时,预安装的应用程序将被删除,新的ipa捆绑包将从顶部解压缩。无论哪种方式,即使@BufferStack担心资源可能仍然存在,我的回答的第二部分(重命名ViewController类)是正确的。@TonyMillion:+1用于重构提示。我曾考虑过重命名ViewController类,但试图避免在所有VCs中占用如此多的任务,重构是救命稻草。在本地化XIB后,我遇到了同样的问题,它将旧的NIB从以前的版本留在了我的设备上。通过应用商店安装将删除该文件,因为旧NIB在加密时不是捆绑包的一部分,保留旧文件与签名不匹配。谢谢你确认我不是疯子!
    TheNewVC *theNewVC = [[TheNewVC alloc] initWithNibName:@"TheNewVC" bundle:nil];
    [self presentModalViewController:theNewVC animated:YES];
    TheNewVC *theNewVC = [[TheNewVC alloc] initWithNibName:nil bundle:nil];

    UINavigationController *addNavCon = [[UINavigationController alloc] initWithRootViewController:theNewVC];
    [self presentModalViewController:addNavCon animated:YES];