Как обновить расширение виджета iOS 10 сегодня данными из хост-приложения?

Я просмотрел документацию Apple и много искал, но не могу найти ни кода, ни конкретного объяснения, как это сделать.

Я хочу отправить данные в виджет, когда пользователи открывают определенный 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);
}
}

[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/

Другие вопросы по тегам