5

我有一个全局变量 ,User * currentUser;它可以从任何类中更改。我想NSUserDefaults在任何更改时保存它。

是否可以将 KVO 用于这样的全局变量,或者有没有其他方法可以实现类似的效果?

我添加了我的应用程序委托作为观察者currentUser

 [self addObserver:self forKeyPath:@"currentUser" options:NSKeyValueObservingOptionNew context:nil];

--

-(void)observeValueForKeyPath:(NSString *)keyPath
                     ofObject:(id)object
                       change:(NSDictionary *)change
                      context:(void *)context
{
    if ([keyPath isEqualToString:@"currentUser"])
    { 
        NSDictionary * userDict = [currentUser dictionaryRepresantation];

        [UserDefaults setObject:userDict forKey:@"USER_DATA"];
        [UserDefaults synchronize];
    }
}

但这不叫。

4

1 回答 1

3

您不能为全局变量添加观察者,KVO 仅适用于对象的属性。您可以将全局变量包装在应用程序委托上的 getter/setter 对中,但您也可以使用常规属性,因为只有使用 setter 的更改才会触发 KVO 通知。

此外,无论如何,您都不应该使用全局变量,即使您将它们伪装成“单例”也不行。

于 2013-02-16T13:46:01.010 回答