如何使用来自主机应用程序的数据更新 iOS 10 今天小部件扩展?

How to update iOS 10 today widget extension with data from host app?

我查看了 Apple 的文档并进行了大量搜索,但找不到任何代码或具体说明如何执行此操作。

我想在用户打开特定 viewController 时向小部件发送数据,然后更新小部件的视图以显示新数据。

我试过:

  1. 正在添加通知。 (从应用程序发布时未在小部件代码中触发)
  2. 在应用程序中有一个单例 object 并更新一个 属性,并从小部件中获取数据。 (这部分有效,但小部件永远不会更新)

我已经处理了更新小部件中的视图,但是当我想更新小部件时没有调用它(因为公司机密更改了一些值):

- (void) widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
NSDictionary *data = [[SINGLETON sharedInstance] getData];

if(_data == nil && data == nil) {
    _showData = NO;
    completionHandler(NCUpdateResultNoData);
} else if(_data != nil && [_data isEqual:data]) {
    _showData = YES;
    completionHandler(NCUpdateResultNoData);
} else if(data == nil) {
    _data = nil;
    _showData = NO;
    [self updateView];
    completionHandler(NCUpdateResultNewData);
} else {
    _data = data;
    _showData = YES;
    [self updateView];
    completionHandler(NCUpdateResultNewData);
}
}

[self updateView] 正在根据 _showData 更新小部件的视图(两种不同的视图,一种显示数据,另一种不显示任何数据)。

有人可以提供一个简单的代码示例(包括应用程序和小部件),说明如何将数据发送到小部件(从主机应用程序 viewController)以及如何在发送/接收数据时更新小部件的视图吗?

您可以通过将数据存储在共享容器中来在您的应用和小部件之间传递数据。然后您的应用程序可以将数据写入该容器,您的小部件可以从那里读取数据。

例如查看此问题(包括问题和答案)。 Sharing data between an iOS 8 share extension and main app

或者您可以观看本教程。 https://www.youtube.com/watch?v=h3qUsjUMj74

ObjC 教程(注意第 5 步及后续步骤)。 http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/