【问题标题】:App crashes on iOS10 with exception "There doesn't seem to be a valid compiled storyboard at path"应用程序在 iOS10 上崩溃,异常“路径中似乎没有有效的编译故事板”
【发布时间】:2017-02-22 16:53:32
【问题描述】:

从 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,尽管我也看到了对其他情节提要文件和 .xib 文件的引用。

谷歌搜索上述错误表明 XCode 中与 iOS 架构相关的构建设置不正确,我已经仔细检查了这些设置。如果我的应用程序不是针对正确的架构构建的,那么该应用程序肯定一开始就无法运行吗?

这个问题无法可靠地重现,它可能随时发生。

任何建议将不胜感激。

【问题讨论】:

  • 试试这个解决方案:stackoverflow.com/a/26239971/1689376
  • 我的 Storyboard 都没有打开本地化,我也没有扩展。我会尝试打开本地化...
  • 本地化失败,问题依旧。
  • 您最近是否更改过设备系列?您的应用程序仅适用于 Universal 还是 iPad/iPhone?您的故事板中是否启用了大小类别功能?请回答所有这些问题。
  • 我一直在按照 stackoverflow.com/questions/40036842/... 调整设备系列设置,现在已经解决了。应用程序是通用的。尺寸等级功能已启用。所有项目都安装了紧凑宽度 x 常规高度和常规宽度 x 常规高度。在某些项目上,最顶部的“已安装”(我相信是 Any by Any)复选框已勾选,有些未勾选。

标签: ios iphone crash storyboard ios10


【解决方案1】:

此问题已通过禁用 NSFetchedResultsControllers 中的缓存得到解决。

之前没有提到的一些症状,因为我不知道这些症状是相关的:

  • 我无法在 Debug 环境中重现崩溃,只能在 Beta 或 Release 版本中重现。
  • 错误信息:

    [error] 错误:(NSFetchedResultsController):无法读取缓存文件以更新存储信息时间戳

    经常记录在调试输出中,但从未记录在生产日志中。

  • 仔细观察上面的错误信息后,我可以看到我的应用程序正在创建大量的文件描述符,打开缓存文件夹中的文件,并且永远不会关闭或释放它们。

    李>

我的应用程序有很多 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

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 2017-02-27
    • 2015-06-16
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多