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

时间:2016-12-14 13:12:40

标签: ios objective-c widget today-extension ios10-today-widget

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

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

我试过了:

  1. 添加通知。 (从应用程序发布时未在窗口小部件代码中触发)
  2. 在应用中拥有单个对象并更新属性,并从小部件中获取数据。 (这部分有效,但小部件永远不会更新)
  3. 我已经处理过更新窗口小部件中的视图,但是当我想要更新窗口小部件时(由于公司机密更改了一些值),这不会被调用:

    - (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更新小部件的视图(两个不同的视图,一个显示数据,一个没有任何数据)。

    有人可以提供一个简单的代码示例(app和widget),介绍如何将数据发送到widget(来自主机app viewController)以及如何在发送/接收数据时更新widget的视图?

1 个答案:

答案 0 :(得分:2)

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

例如,查看这个问题(问题和答案)。 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/