Обмен данными между расширением приложения и приложением-конайнером

Я пытаюсь обмениваться данными между расширением приложения и моим контейнерным приложением. Я настроил группу приложений в приложении-контейнере и сослался на нее в своем расширении приложения.

Когда к моему расширению приложения обращаются, я сохраняю объект в NSUserDefaults

//in the app extension
-(void)viewDidLoad {
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mygroup.com"];
[defaults setObject:[NSDate date] forKey:@"Date"];
[defaults synchronize];
}

а в приложении-контейнере - когда он запускается, я настраиваю наблюдателя:

// in the container app
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDefaultChanged:) name:NSUserDefaultsDidChangeNotification object:nil];
}
-(void)userDefaultChanged:(NSNotification *)note
{
    NSLog(@"Changed");
}

Но если мое контейнерное приложение было отправлено в фоновый режим, это уведомление никогда не вызывается, поэтому я не могу узнать, когда было изменено пользовательское значение по умолчанию.

Как я могу получить информацию в приложении-контейнере (для внутреннего обновления)?


person Avner Barr    schedule 07.08.2014    source источник
comment
stackoverflow .com/questions/17307456/   -  person Andrew    schedule 07.08.2014
comment
Изучите уведомления Darwin, чтобы решить эту проблему.   -  person Yevhen Dubinin    schedule 10.01.2017


Ответы (1)


Я могу ошибаться, но NSNotification работает в основном в основном потоке, а это значит, что вы никогда не получите это уведомление.

Также вы должны отказаться от подписки на любое уведомление, когда представление выгружается, в этом случае я не думаю, что это хорошая идея иметь подписку, сидящую там.

В этом случае я бы просто проверял NSUserDefaults каждый раз, когда приложение просыпается (существуют методы Delegate, которые вы можете активировать в AppDelegate, например: «applicationDidBecomeActive»

person wolffan    schedule 17.11.2014