2015-02-05 70 views
1
//Declarations 
var scoreIncrement:Int = 0 
var team = "" 
var userScore = Dictionary<String,Int>() 

//Set Values 
team = "USA" 
userScore[team] = 0 

//Store in NSUserDefaults 
NSUserDefaults.standardUserDefaults().setObject(userScore, forKey: "userScore") 
NSUserDefaults.standardUserDefaults().synchronize() 

//Increment Score 
scoreIncrement = 1 
userScore[team]! += scoreIncrement 

以上代碼給出關於代碼的最後一行「EXC_BAD_ACCESS(代碼= EXC_I386_GPFLT)」錯誤。然而,如果我評論出行:貯藏字典中引起NSUserDefaults的EXC_BAD_ACCESS

NSUserDefaults.standardUserDefaults().setObject(userScore, forKey: "userScore") 

錯誤消失。任何想法爲什麼發生這種情況,我甚至沒有從NSUserDefaults中檢索字典。

回答

0

通過檢索字典背出來的NSUserDefaults的問題解決了拯救它之後:

var userScoreTemp : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("userScore") 
    if userScoreTemp != nil { 
     userScore = userScoreTemp! as Dictionary 
    } 
0

我有這個問題爲好。原來是KVO問題。您可能已取消分配了一個對象,該對象的值爲,該值爲,因此消息正在發送且未按預期接收。

我的解決方案是從關聯的釋放對象中刪除觀察者。請始終記住,如果您addObserver:forKeyPath:options:context:要與關聯的removeObserver:forKeyPath:呼叫相匹配。

0

我有同樣的問題。

我存儲字符串值在像NSUserDefaults的:

[[NSUserDefaults standardUserDefaults] stValue:@"Rahul" forKey:@"Name"]; 

一定的時期,它墜毀在同一點,寫入相同的值之後。原因是在這段時間之後,我註冊了NSUserdefaults中的更改,代碼如下:

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

這是在導入器初始化時完成的。在導入器被釋放後,向用戶默認的新寫入觸發觀察者去除了已經消失的對象。崩潰。

解決方案當然是要刪除觀察者。

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [默認removeObserver:self forKeyPath:@「Name」];