2016-12-14 26 views
0

我看过苹果的文档并搜索了很多,但我找不到任何代码或关于如何做到这一点的具体解释。如何使用主机应用程序中的数据更新iOS 10今日窗口小部件扩展?

我希望当用户打开特定的viewController,然后更新窗口小部件的视图来显示新的数据将数据发送到小部件。

我曾尝试:

  1. 添加通知。 (从应用程序发布时未在小部件代码中触发)
  2. 在应用程序中拥有一个单例对象并更新属性并从小部件中获取数据。 (这部分工作,但小部件从未更新)

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

- (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); 
} 
} 

[自的UpdateView]正在更新基于_showData(一个示出数据和一个无任何数据的两个不同视图,)小部件的视图。

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

回答

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/

+0

谢谢!我认为出于某种原因,你不应该在iOS 10扩展中使用NSUserDefaults(组),youtube电影真的很有帮助。 – Otziii

+0

YouTube视频似乎不再可用。有没有机会重新上网? – valeCocoa

相关问题