在我的應用程序中,我保存的一件事是一組開關的值。這個想法是將每個開關的狀態保存在NSMutableDictionary中。在另一種方法中,我讀出每個開關的值(「狀態」),並用它來執行簡單的計算。基本上,這些開關告訴我用戶有什麼。將NSMutableDictionary保存爲NSUserDefaults
在我的數據模型中。
-(void)savePlates:(NSMutableDictionary *)settingPlates {
[self setObject:settingPlates forKey:@"plates"];
[self synchronize];
}
-(NSMutableArray *)loadPlates {
NSMutableArray *plates = [[self dictionaryForKey:@"plates"] mutableCopy];
return plates;
}
在視圖控制器中使用它的一個例子。其中「設置」是定義上述方法的類的一個實例。
-(IBAction)switch55:(id)sender {
if (self.switch55.on) {
[self.plateSelectionDict setObject:@YES forKey:@55];
} else {
[self.plateSelectionDict setObject:@NO forKey:@55];
}
[settings savePlates:self.plateSelectionDict];
if (DEBUG) {
NSLog(@"%@", self.plateSelectionDict);
}
}
我在這條線上崩潰。 [self setObject:settingPlates forKey:@「plates」];
的錯誤是,
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'*** -[Settings setObject:forKey:]: attempt to insert non-property list object {
55 = 0;
25 = 1;
"0.25" = 1;
"0.5" = 1;
"0.75" = 1;
45 = 1;
15 = 0;
1 = 1;
10 = 1;
"2.5" = 1;
35 = 1;
5 = 1;
} for key plates'
什麼是混淆是它吐出正確的價值觀,但仍然拋出異常。我一定在做一些非常錯誤的事情。任何援助將不勝感激。
這指出我在一個答案的方向。如果將NSDictionary作爲屬性保存,則密鑰必須是字符串。謝謝。 – Jeremy
你爲什麼不選中我的答案並選擇其他答案?另一個答案是錯誤的。它聲明你的數字鍵是有效的。他們不是。他們必須像我說的那樣是字符串。 – rmaddy