Ale*_*one 1 exc-bad-access objective-c key-value-observing nsuserdefaults ios
我遇到了一个奇怪的错误,想检查我是否正在使用我的Key值正确观察NSUserDefaults的变化.
我在我的应用程序的两个地方使用了这个代码没有问题,然后我添加了第三个控制器,它观察"goldCount"和"energyCount"的值.现在,当我设置初始值时,应用程序崩溃与exc_bad_access.我在使用父视图后2秒将该控制器添加到视图中performSelectorAfterDelay.
在显示游戏屏幕之前,我设置了以下属性:
//crash on this line
[[NSUserDefaults standardUserDefaults] setInteger:200 forKey: goldCount];
[[NSUserDefaults standardUserDefaults] setInteger:150 forKey: energyCount];
Run Code Online (Sandbox Code Playgroud)
在3个不同的视图控制器中,我在viewDidLoad中有这个代码:
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults addObserver:self
forKeyPath:@"goldCount"
options:NSKeyValueObservingOptionNew
context:NULL];
[defaults addObserver:self
forKeyPath:@"energyCount"
options:NSKeyValueObservingOptionNew
context:NULL];
self.goldLabel.text = [NSString stringWithFormat:@"%i",[[GameDataManager sharedInstance] currentGoldCount]];
self.energyLabel.text = [NSString stringWithFormat:@"%i",[[GameDataManager sharedInstance] currentEnergyCount]];
Run Code Online (Sandbox Code Playgroud)
以下是该类更新其标签的方式:
// KVO handler
-(void)observeValueForKeyPath:(NSString *)aKeyPath ofObject:(id)anObject
change:(NSDictionary *)aChange context:(void *)aContext
{
//aKeyPath gives us the name of a user default that has changed
if([aKeyPath isEqualToString:@"goldCount"])
{
//we are interested in the new value
self.goldLabel.text = [NSString stringWithFormat:@"%i",[[aChange objectForKey:@"new"] intValue]];
}else if([aKeyPath isEqualToString:@"energyCount"])
{
self.energyLabel.text = [NSString stringWithFormat:@"%i",[[aChange objectForKey:@"new"] intValue]];
}
}
Run Code Online (Sandbox Code Playgroud)
添加对[[NSUserDefaults standardUserDefaults] synchronize]的调用后; 我第二次得到这个例外:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'():-observeValueForKeyPath:ofObject:change:context:收到消息但未处理.关键路径:goldCount观察对象:更改:{kind = 1; new = 205; 上下文:0x0'
NSUserDefaults未记录为符合KVO标准,因此无法通过其密钥观察默认值.这可能是崩溃的原因,但没有堆栈跟踪,这是不可能的.
您可以注册一个通知,宣布对默认系统的更改:NSUserDefaultsDidChangeNotification.
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |