sul*_*lik 5 cocoa-touch objective-c key-value-observing
我有一个gloabal变量,User * currentUser;可能会从任何类更改.我希望保存它以适应NSUserDefaults任何变化.
是否可以将KVO用于这样的全局变量,还是有其他方法可以实现类似的效果?
我添加了我的app委托作为观察者currentUser:
[self addObserver:self forKeyPath:@"currentUser" options:NSKeyValueObservingOptionNew context:nil];
Run Code Online (Sandbox Code Playgroud)
-
-(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];
}
}
Run Code Online (Sandbox Code Playgroud)
但这并没有被称为.
您无法为全局变量添加观察者,KVO 仅适用于对象的属性。您可以将全局变量包装在应用程序委托上的 getter/setter 对中,但是您也可以使用常规属性,因为只有使用 setter 进行的更改才会触发 KVO 通知。
另外,无论如何,您都不应该使用全局变量,即使您将它们伪装成“单例”也是如此。