1

我在我的应用程序中使用了这部分代码一段时间,它按预期工作。但是现在,它在使用 setInteger 时崩溃了:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int selEvent = [defaults integerForKey:@"selected_event"];
/*
 * Do Something with selEvent
 * New ID is in NSNumber event_id
 */
[defaults setInteger:[event_id intValue] forKey:@"selected_event"]; //Crashes on this line
[defaults synchronize];

在 Xcode 4.5.1 和 iPad 6.0 模拟器中工作。

我得到一个 EXC_BAD_ACCESS。

我的问题的原因是什么?

4

4 回答 4

3

我有同样的问题。我把它追溯到别的东西:

我将整数存储在 NSUserDefaults 中,代码如下:

[[NSUserDefaults standardUserDefaults] setInteger:_currentBannerIndex forKey:@"currentBannerIndex"];

一段时间后,它在同一点崩溃,写入相同的值。原因是在这段时间之后,我注册了 NSUserdefaults 的更改,代码如下:

[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(userDefaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil];

这是在初始化时在导入器中完成的。在导入器被释放后,对用户默认值的新写入正在触发观察者对已消失的对象。繁荣。碰撞。

解决方案当然是在我的进口商的 dealloc 中删除观察者。

于 2014-06-16T09:59:51.597 回答
1

对我来说,我会说问题出在[event_id intValue]

event_idis NSString& 它被释放,因此发生了这个错误。

于 2017-06-11T06:06:20.483 回答
-1

发现我的问题:

NSDictionary *defaultUserDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                     [NSNumber numberWithInt:0], @"selected_event",
                                     nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultUserDefaults];

这在 setInteger 之前有效:

用 setObject 改变了所有的 setIntegers。

于 2013-01-09T09:47:50.697 回答
-1
   [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"KeyName"];
于 2013-01-09T11:40:51.590 回答