Today Widget 扩展的问题

Posted

技术标签:

【中文标题】Today Widget 扩展的问题【英文标题】:Issues with Today Widget extension 【发布时间】:2014-09-21 02:27:32 【问题描述】:

我的应用有一个 Today Widget,但有人告诉我它存在问题。

基本上,似乎正在发生的事情(我无法自己测试)是小部件有时只会显示“无法加载”,而其他时候它只会显示高度为 0。

我真的不明白为什么会这样。我已经在我的设备和模拟器上测试了几周,从未遇到过这个问题。

我想知道它是否可能归结为刷新代码:

    func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)!) 
    // Perform any setup necessary in order to update the view.

    var defaults = NSUserDefaults(suiteName: "group.AffordIt")
    var newCheck = defaults.boolForKey("new")

    if newCheck == true 
        completionHandler(NCUpdateResult.NewData)
     else 
        completionHandler(NCUpdateResult.NoData)
    

每当我的应用中需要在小部件中显示的内容发生变化时,'newCheck' 为真。

有谁知道这些问题的可能原因是什么?

【问题讨论】:

【参考方案1】:

如果您的扩展程序经常崩溃,则会出现“无法加载”消息。您可以尝试通过删除并再次添加扩展来重新启用它。

【讨论】:

我发布了对我的应用程序的更新以解决另一个错误。我根本没有修改小部件代码,而且它似乎已经修复了它,所以它可能是一个 ios 8 错误。如果用户尝试使用小部件但尚未打开应用程序,仍然会显示“无法加载”错误。那么有什么办法可以改变这条消息吗? @user3746428 您可以创建一个NSUserDefaults 键(Google 如何读取应用程序和小部件之间的共享默认值),它是一个简单的BOOL,指示您的应用程序是否已首先运行。在您的应用启动时检查密钥,如果它是 false,则显示一条消息,告诉用户首先运行应用。【参考方案2】:

您是否使用自己的视图控制器和 xib 而不是情节提要?如果是,可能是您没有在视图控制器中设置 preferredContentSize。

尝试将以下代码放入你的视图控制器的init函数中:

    self.preferredContentSize = CGSizeMake(320, 100);

我今天刚刚开始扩展编程,所以我不确定它是否真的对你有帮助。这是我自己的小部件中的结果:

【讨论】:

【参考方案3】:
    在今天的扩展程序中按编辑按钮 删除您的扩展程序 再次添加您的扩展程序。

【讨论】:

以上是关于Today Widget 扩展的问题的主要内容,如果未能解决你的问题,请参考以下文章

将数据从Core Data加载到Today Widget

Today Extension Widget 内容更新

从 iOS 8 Today Widget 访问 PFIzer 当前用户

将数据从 Core Data 加载到 Today Widget

Dose NSTimer 可以在 Today Extension (Widget) 中使用吗?

Core Data iOS 8 Today Widget 问题