2013-01-09 65 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