2013-01-09 63 views
1

我在我的应用程序中使用了这段代码一段时间,它按预期工作。但现在,它与setInteger在线上崩溃:NSUserDefaults与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。

我的问题是什么原因?

+0

你和你是如何创建event_id(是在相同的方法,你把它保存到默认或不)?另外,你在你的项目中使用ARC吗?使用arc的 – Vladimir

+0

,event_id的创建方式与之前相同。它具有一个有效值,如果我在setInteger之前停止了程序:(与之前一样) – jussi

+0

相同的代码在我的iPad 6.0模拟器上正常工作。区别在于我没有使用弧。 – PeakCoder

回答

-1

发现我的问题:

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

此之前setInteger工作:

改变了所有setIntegers用的setObject。

-1
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"KeyName"]; 
3

我有同样的问题。我跟踪它回到别的东西:

我存储在整数NSUserDefaults的只是类似的代码罚款:

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

一定的时期,它坠毁在同一地点后,写了相同的值。 的原因是,这一时期后,我注册的变化NSUserDefaults的使用代码,如:

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

这是在进口商在初始化完成。在导入器被释放后,向用户默认的新写入触发观察者去除了已经消失的对象。繁荣。崩溃。

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

1

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

event_idNSString &其得到释放,因此,这个错误发生。

+0

海事组织,你指出了真正的原因... – user3102156