从iOS10开始,我有用户抱怨我的应用程序随机崩溃,特别是当屏幕被锁定时。当他们解锁屏幕时,他们可以看到应用程序一秒钟然后崩溃。在日志中,我可以看到许多这样的条目:
由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'似乎没有 在路径上有效编译的故事板 '/var/containers/Bundle/Application/serialcode/XXX.app/AppLaunchStoryboard.storyboardc'” ***首先抛出调用堆栈:(0x1d465e07 0x1c6cb077 0x22c14083 0xe7d55 0x115ae7 0xbe37d 0x2252897f 0x22726e9d 0x1ed151e1 0x1dd46419 0x1dcc5743 0x1ec98f3f 0x1ed0f3d1 0x1ed1503d 0x227276fd 0x227273c1 0x22a2fa07 0x1ecfef2d 0x1ed2a9cb 0x1ed2a885 0x1ed2ab6f 0x1d421c8b 0x1d421795 0x1d41fa6b 0x1d36f073 0x1d36ee81 0x1eb17bfd 0x2250fccf 0x2250a401 0xbf879 0x1cb3a50b)libc ++ abi.dylib:终止于 NSException类型的未捕获异常
“无效”文件通常是AppLaunchStoryboard.storyboard
,尽管我也看到过对其他storyboard文件和.xib文件的引用。
将上述错误指向与我已经仔细检查的iOS架构相关的XCode中的错误构建设置。如果我的应用程序不是为正确的架构而构建的,那么应用程序肯定不能在第一时间运行吗?
此问题无法可靠地重现,可能随时发生。
任何建议都将不胜感激。
答案 0 :(得分:0)
通过在NSFetchedResultsControllers中禁用缓存来解决此问题。
以前没有提到的一些症状,因为我不知道症状是否相关:
错误消息:
[error] error:(NSFetchedResultsController):无法读取缓存文件以更新商店信息时间戳
经常记录在Debug输出中,但从不在Production logs中记录。
在更多关注上述错误消息后,我发现我的应用程序正在创建大量的文件描述符,在缓存文件夹中打开文件,从不关闭或释放它们。
我的应用程序有很多NSFetchedResultsControllers:
NSFetchedResultsController * fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:@“someName”];
我改为:
NSFetchedResultsController * fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
解决了这个问题。
以下文章也有助于指出我正确的方向: too-many-open-files-after-calling-fabric-framework-run