Xcode8 'Could not load NIB in bundle'

Xcode8 'Could not load NIB in bundle'

自从我将我的项目升级到 xcode8 和 swift3 后,我在 运行 我的应用程序在 ios10 设备和模拟器上遇到问题。

我可以正常启动应用程序,但使用一段时间后出现以下错误:

*** Terminating app due to uncaught exception   
'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle:
'NSBundle </Users/****/Library/Developer/CoreSimulator/Devices/****/data/Containers/Bundle/Application/****/*****.app> (loaded)' 
with name 'Ncx-Ud-4zl-view-1i6-0r-ivc' and directory 'Main.storyboardc''
***

奇怪的是,有时我可以浏览同一个菜单或查看,但在 3 或 4 次后它会给我错误。

该应用程序可在 ios9 台设备上正常运行。

更新: 我终于解决了将我的 CoreDataStackManager class 更新为 Swift3 语法并避免在我的 NSFetchedResultsControllers 上使用缓存的问题。

整个星期我也一直在努力解决这个完全相同的问题,NIB 有时不会随机加载。我今天偶然发现了一些有趣的东西,但它解决了我的问题:

(NSFetchedResultsController): couldn't read cache file to update store info timestamps(感谢 Donnit 的回答!)

简而言之,问题与我用来检索和显示 CoreData 模型的 NSFetchResultsController 有关。如果您在应用程序中使用 NSFetchRequestController 并且在初始化函数中设置了自己的 cacheName,那么 Apple 在 iOS 10 中引入的错误似乎会在后台打开文件每次保存托管对象上下文时设备的。 iOS 设备可以打开的最大文件数是 255,因此它无法打开和加载新的 NIB 文件,然后崩溃(这似乎是我们得到的结果)。

Donnit 进行了一些测试,表明此问题已在 iOS 10.2 的 Beta 版中得到解决,但在此期间的临时修复是在公开发布更新之前删除 cacheName来自你 NSFetchResultsController

不确定您是否有同样的问题,但它为我解决了所有问题。