68

我正在尝试将 Swift 中的 Today Extension 添加到我的 Objective-C 应用程序中。我在调试器日志中不断收到此消息:Failed to inherit CoreMedia permissions from 3005: (null). 号码前。3005每次都不一样。我正在从小部件中读取 NSUserDefaults,但我正在应用程序本身中读取/写入。我的 TodayViewController 中唯一的代码如下:

override func viewDidLoad() {
    super.viewDidLoad()

    let formatter = NSNumberFormatter()
    formatter.numberStyle = .CurrencyStyle
    totalLabel.text = formatter.stringFromNumber(0)
    coinsLabel.text = formatter.stringFromNumber(0)

    formatter.maximumFractionDigits = 0
    billsLabel.text = formatter.stringFromNumber(0)

}

func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
    return UIEdgeInsetsMake(8.0, 16.0, 8.0, 16.0)
}

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

    // If an error is encountered, use NCUpdateResult.Failed
    // If there's no update required, use NCUpdateResult.NoData
    // If there's an update, use NCUpdateResult.NewData

    completionHandler(NCUpdateResult.NewData)
}
4

15 回答 15

53

我相信在您创建应用程序扩展时,“无法从 NNNN 继承 CoreMedia 权限”警告与应用程序组有关。您的包含应用程序和应用程序扩展都需要打开应用程序组功能并使用相同的应用程序组容器 ID(例如:group.com.yourdomain.yourappname)。应用程序组用于允许多个应用程序访问共享容器,并允许应用程序之间进行额外的进程间通信。

能力应该是这样的

于 2014-09-29T16:14:18.473 回答
16

首先,点击Assets.xcassets

首先,点击 Assetes.xcassets

其次,单击 Target Membership,检查您的应用程序和小部件以允许小部件访问您的资源。

二、点击目标会员

之后,再次运行您的小部件,它现在应该可以正常工作了。

于 2016-03-04T11:05:12.210 回答
14

我有相同的日志输出。清洁(Cmd + Shift + K)为我解决了这个问题。

于 2014-10-29T13:10:26.463 回答
9

我也遇到了这个问题,我解决的唯一解决方案是在情节提要上添加每个对象的垂直和水平约束。

于 2015-02-24T10:34:23.557 回答
8

签入今天扩展的 mainstoryboard,启用了带有“是初始视图控制器”选项的视图控制器。

于 2016-12-10T19:19:11.233 回答
5

在完成了这个问题的答案中提到的大部分事情之后,今天的小部件仍然出现错误 - 我发现了一些对我有用的东西。

打开您的小部件目标 Build Settings并搜索Always Embed Swift Standard Libraries。选择是。

如果没有其他帮助,希望这对您有用

于 2018-04-06T12:45:22.473 回答
4

非常误导的错误。如上所述。选择您的视图控制器并添加缺少的约束或为自己添加约束以解决问题。

在此处输入图像描述

于 2015-11-13T11:57:13.400 回答
3

我发现如果您使用 StoryBoard,您需要进入 info.plist 并删除该属性NSExtensionPrincipalClass。之后,扩展开始加载就好了。

于 2017-01-25T16:10:05.537 回答
2

这让我很受打击,因为我init(nibName:bundle:coder:)在视图控制器中有一个自定义的合并方法,并且initWithCoder为了满足 Swift 而实现了这样的方法:

required init?(coder aDecoder: NSCoder) {
    self.init(nibName: nil, bundle: nil, coder: aDecoder)
}

我通过调用该实现super.init(coder:)来解决了这个问题:

required init?(coder aDecoder: NSCoder) {
    // [...setting some variables...]
    super.init(coder: aDecoder)
}
于 2019-03-28T20:24:02.500 回答
2

我在运行我的扩展程序时遇到了同样的问题。就我而言,它是通过在真实设备中运行扩展来解决的。

于 2017-01-24T07:19:49.287 回答
0

我也遇到了这个问题。对我来说,问题是我在模拟器上同时运行两个程序。在我停止其中一个之后,错误消息消失了。希望能帮助到你。

于 2017-02-11T16:55:30.847 回答
0

这是我对此错误消息的经验。我有一个故事板,里面有 4 个 ViewController。我对所有这些都做了重构提取,所以现在我有 5 个故事板,其中 4 个有视图控制器,而原来的“主要”一个只有故事板引用。

嗯……这很糟糕。不要那样做。

当我将初始故事板保存在原始故事板文件中时,一切正常,所以我没有只重构其中一个。

于 2017-03-30T17:13:15.640 回答
0

我通过以下方式解决了我的问题:为容器和扩展应用程序打开应用程序组。并将所有隐藏的 UIKit 控件删除为UILabel, UIView, ...

于 2015-12-22T23:23:16.090 回答
-3

确保参数[[NSUserDefaults alloc] initWithSuiteName:APP_GROUP]匹配您定义的组名。

于 2014-12-18T14:32:12.540 回答
-5

模拟器的问题,试试真机。

于 2015-11-19T09:57:53.977 回答