Today-Widget "Unable to load" 错误

Today-Widget "Unable to load" error

小部件有时会因 "unable to load" 错误而崩溃。 有人知道如何解决吗? 小部件没有请求服务器或其他东西。

无法在中加载今天扩展主要出现在以下时间:

  1. 您的扩展由于某种原因崩溃了
  2. 占用的内存比系统提供的内存多。 (内存限制:最大约 16MB)

调试您的应用扩展以找出确切的问题。

请参阅 Xcode 的 调试仪表 了解内存和 CPU 利用率。

编辑:

调试今天的扩展程序

您可以像调试主项目一样调试扩展程序。只是 select 您的 Xcode 和 运行 项目中的特定 target scheme

现在尝试在扩展代码中使用断点和其他打印语句,一切顺利。编码愉快..

我遇到过这个错误 我使用了自定义视图。但是忘了检查 Is initial viewController。 将入口点表单 "show attribute inspector" 设置为初始视图控制器

  1. 我遇到过同样的问题,它没有显示任何内容。甚至我的调试选项也不起作用。我在网上找到一篇文章,对我帮助很大。我想在这里推荐这个。

  2. 大多数时候是内容视图的大小导致小部件崩溃。在这种情况下,请在 TodayViewController 中使用此代码片段。

代码片段

override func viewWillAppear(_ animated: Bool)
{
    var currentSize: CGSize = self.preferredContentSize
    currentSize.height = 200.0
    self.preferredContentSize = currentSize
}                                                                                       

Link 进一步研究。

确保你有超过 0 行

我构建了一个类似于 Building a Simple Widget for the Today View 的今日小部件。

我有 none 个上述问题。我的是 0 行(我没有这一天的数据,因此是 0 行)。我没想到这可能是问题,因为在主应用程序中,您可以有空的 table-view.

如果您看到 unable to load 消息,请确保您至少有 1 行。

viewDidLoad中设置:

extensionContext?.widgetLargestAvailableDisplayMode = .expanded

重启设备。
这救了我。

在我的例子中,NotificationCenter.framework 被不小心从小部件目标 Build Phases 选项卡中的 Link Binary With Libraries 中删除。