在应用扩展程序和容器应用之间共享数据

时间:2014-08-07 13:38:09

标签: ios objective-c nsuserdefaults nsfilecoordinator ios-app-group

我正在尝试在应用扩展程序和我的容器应用之间共享数据。 我在容器应用中设置了一个应用组,并将其引用为我的应用扩展程序。

访问我的应用扩展程序时,我将对象保存到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");
}

但如果我的容器应用程序被发送到后台,则永远不会调用此通知 - 因此我无法知道用户默认值何时更改。

如何在容器应用中获取信息(为了在内部更新)?

1 个答案:

答案 0 :(得分:1)

我可能会弄错,但NSNotification主要在主线程中运行,这意味着你永远不会收到通知。

此外,您应该在卸载视图时取消订阅任何通知,在这种情况下,我认为坐在那里订阅并不是一个好主意。

在这种情况下,我只是在每次应用程序唤醒时检查NSUserDefaults(可以在AppDelegate上激活Delegate方法,例如:“applicationDidBecomeActive”