2016-03-28 2 views
0

У меня есть PLIST настройки уровняUpdate NSUserDefaults Вложенные словарь

defaultPrefs.plist

Root  Dictionary 
Level1 Dictionary 
time  Number  0 
pushes Number  0 
moves Number  0 
unlocked Boolean YES 
Level2 Dictionary 
time  Number  0 
pushes Number  0 
moves Number  0 
unlocked Boolean NO 

и т.д.

Я их регистрации в AppDelegate

let plist: String? = "defaultPrefs" 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    let path = NSBundle.mainBundle().pathForResource(plist, ofType: "plist")! 
    let dict = NSDictionary(contentsOfFile: path) as! [String: AnyObject] 
    NSUserDefaults.standardUserDefaults().registerDefaults(dict) 
} 

Я d хотели бы их обновить

func writeToPlist() { 
     let defaults = NSUserDefaults.standardUserDefaults() 
     let level1Dict:AnyObject = defaults.objectForKey("Level1")! 
     //let level1Dict:AnyObject = defaults.dictionaryForKey("Level1")! 
     level1Dict.setValue(1, forKey: "moves")   
     //level1Dict.setInteger(1, forKey: "moves") 
} 

Ошибка:

mutating method sent to immutable object


Я пройду в переменных, чтобы выбрать уровень Dict и ключ и т.д., когда он работает


Update

let level1Dict:AnyObject = defaults.objectForKey("Level1")!.mutableCopy() 

level1Dict.setValue(1, forKey: "moves") 
defaults.setObject(level1Dict, forKey: "Level1") 

ответ

1

словарь вернулся из пользователей по умолчанию является неизменным, так что вам нужно сделать изменяемую копию, прежде чем вы можете редактировать его:

let level1Dict:AnyObject = defaults.objectForKey("Level1")!.mutableCopy() 

Отметим также, что редактирование словаря не будет автоматически обновлять по умолчанию пользователя и вам необходимо установить новый словарь для ключа (для замены полного словаря старых настроек).

+0

Спасибо, мог бы поклясться, что я попробовал это, но теперь он работает :) defaults.setObject (level1Dict, forKey: «Level1») Я обновил этот вопрос с этим тоже –