我想我需要一些帮助。
在我的应用程序中,我有一个UILabel
,其文本来自"整数"。每当View
加载时,它就会获得整数的实际NSUserDefaults
存储值:
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.sam.Widget"];
counter = [defaults integerForKey:@"MyNumberKey"];
numberLabel.text = [NSString stringWithFormat:@"%d", counter];
另外,我确实有一个NC-Widget,其运行方式与应用程序本身相同。 "整数"的值通过App Groups进行同步,因此当我更改Widget中的整数值时,它会将值存储在NSUserDefaults
中。
所以,我的问题是,第二个方向(从Widget到App)仅在App本身关闭时才起作用,甚至不隐藏。
那么,当我关闭通知中心时,如何更新应用程序中的UILabel
,以便它识别我对小部件中的整数所做的更改?
如果你能帮助我,我将不胜感激。 -SAM
答案 0 :(得分:1)
如果您打开通知中心,该应用程序将进入后台。因此,当事件返回到前台时,您需要捕获事件。您可以通过视图控制器中的观察者对系统通知执行此操作。如果您想观察自己的通知,可以在AppDelegate中处理这些:
applicationWillEnterForeground:(UIApplication *)application
不要忘记取消订阅dealloc。 (它仍在ARC中被称为)
- (void) handleEnterForeground: (NSNotification*) sender{
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.sam.Widget"];
counter = [defaults integerForKey:@"MyNumberKey"];
numberLabel.text = [NSString stringWithFormat:@"%d", counter];
}
- (void)viewDidLoad{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(handleEnterForeground:)
name: @"UIApplicationWillEnterForegroundNotification"
object: nil];
}
- (void)dealloc{
[[NSNotificationCenter defaultCenter]removeObserver:self forKeyPath:@"UIApplicationWillEnterForegroundNotification"];
}