Как обновить расширение виджета iOS 10 сегодня данными из хост-приложения?
Я просмотрел документацию Apple и много искал, но не могу найти ни кода, ни конкретного объяснения, как это сделать.
Я хочу отправить данные в виджет, когда пользователи открывают определенный viewController, а затем обновляют виджет, чтобы показать новые данные.
Я пытался:
- Добавление уведомления. (Не запускается в коде виджета при публикации из приложения)
- Наличие одноэлементного объекта в приложении, обновление свойства и получение данных из виджета. (Это частично работает, но виджет никогда не обновляется)
Я занимался обновлением представления в виджете, но это не вызывается, когда я хочу обновить виджет (изменились некоторые значения из-за секретов компании):
- (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) и как обновить виджет при отправке / получении данных?
1 ответ
Вы можете передавать данные между вашим приложением и вашим виджетом, сохраняя данные в общем контейнере. Затем ваше приложение может записывать данные в этот контейнер, а ваш виджет может читать их оттуда.
Проверьте этот вопрос, например (и вопрос, и ответ). Обмен данными между общим расширением iOS 8 и основным приложением
Или вы можете посмотреть этот урок. https://www.youtube.com/watch?v=h3qUsjUMj74
Учебник по ObjC (обратите внимание на шаг № 5 и далее). http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/