我正在尝试将值保存到NSUserDefaults
. 下面是我的代码。
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setValue:theUrl forKey:PREFS_FEED_URL];
我收到的错误是message sent to deallocated instance 0x9495b00
.
这是在模拟器上运行的。我已经验证了 prefs 变量不是nil
.
编辑:下面的完整方法:
- (void) exeSave {
NSString *theUrl = [util isEmptyStr:rssFeedUrl.text] ? nil : [util trimString:rssFeedUrl.text];
if (!theUrl) {
[util showToast:@"The URL entered was empty" duration:1];
return;
}
NSURL *url = [[NSURL alloc] initWithString:theUrl];
if (!url) {
[util showToast:@"The URL entered was invalid" duration:1];
return;
}
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:theUrl forKey:PREFS_FEED_URL];
[prefs synchronize];
}
编辑 2:我刚刚意识到错误消息指的是以前的ViewController
- my RssViewController
. 上面的方法在我的EditSettingsViewController
. 我对Objective C的了解还不够,无法弄清楚为什么会发生这种情况或如何发生这种情况。
编辑 3:经过进一步检查,当我删除观察到NSUserDefaults
.
以下代码在我的RssViewController
在viewDidLoad
方法中,我有以下内容:
[[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:@"feed_url" options:NSKeyValueObservingOptionNew context:nil];
我在方法中删除了观察者dealloc
:
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
self.navigationController.sideMenu.menuStateEventBlock = nil;
}
我覆盖了以下方法。
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqual:PREFS_FEED_URL]) {
NSLog(@"user prefs: url changed");
[self refresh];
}
}
调试器永远不会到达该observeValueForKeyPath
方法。