I have looked at Apple's documentation and searched a lot, but I can't find any code or specific explanation on how to do this.
I want to send data to the widget when users open a specific viewController and then update the widget's view to show the new data.
I have tried:
I have handled updating the view in the widget, but this is not called when I want to update the widget (changed some values because of company secrets):
- (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] is updating the widget's view based on _showData (two different views, one that shows data and one without any data).
Can someone please provide me a simple code example (both app and widget) on how to send data to widget (from host app viewController) and how to update widget's view when data is sent / received?
You can pass data between your app and your widget by storing data in a shared container. Your app could then write data to that container and your widget could read it from there.
Check out this question for example (both the question and the answer). Sharing data between an iOS 8 share extension and main app
Or you can watch this tutorial. https://www.youtube.com/watch?v=h3qUsjUMj74
ObjC tutorial (notice step #5 and further). http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/