2015-04-16 1 views
0

У меня есть NSMutableDictionary я инициированного как этотSwift NSMutableDictionary removeobject

var data = NSMutableDictionary() 

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

let buttonRow = sender.tag 
    let setCount = buttonRow + 1 
    var keyedPath: String = NSString(format: "Set%d", setCount) as String 
    let value: AnyObject? = data.valueForKey(keyedPath) 
    var goodSetsCount: String = NSString(format: "Set%d", goodSets.count) as String 
    goodSets.setValue(value, forKey: goodSetsCount) 
    //data.setValue("Hello", forKey: keyedPath) 
    //data.removeObjectForKey(keyedPath) 

На обеих линиях, которые закомментированными я получаю эту ошибку

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object' 

Если вы можете помочь мне найти ошибку или способ, чтобы удалить объекты и ход их в словаре было бы очень полезно.

+0

Вы пытаетесь удалить объекты из другого словаря, который не является изменяемым (символом 'NSDictionary'). Найдите его и инициализируйте его как изменяемый. – rebello95

+0

Используйте mutableCopy, когда вы устанавливаете данные –

+0

Почему бы вам просто не использовать массив? – Paulw11

ответ

1

По умолчанию NSJSONSerialization.JSONObjectWithData возвращает неизменяемые контейнеры. Вам нужно указать опцию NSJSONReadingOptions.MutableContainers, чтобы получить измененные контейнеры. На самом деле, в Swift 1.2 Ваше задание

data = NSJSONSerialization.JSONObjectWithData(returnData, options: nil, error: &jsonError) as! NSMutableDictionary 

должен бросить исключение во время выполнения, потому что вы используете вынужденный опущенные к NSMutableDictionary, что не получится, хотя я не уверен, если это обеспечивается с классами какао.

Если вы измените строку

data = NSJSONSerialization.JSONObjectWithData(returnData, options: .MutableContainers, error: &jsonError) as! NSMutableDictionary 

ваш код должен работать.

0

Как указано @ Pauwlw11, вы пытаетесь изменить неизменяемый словарь. Кроме того, ваш код может быть понятным, если вы используете с конструкциями Swift, а не просто переводите его из Objective-C.

var data = NSJSONSerialization.JSONObjectWithData(returnData, options: NSJSONReadingOptions.MutableContainers, error: &jsonError) as NSMutableDictionary 

В кнопке обработчик щелчка:

let setCount = 1 
var keyedPath = "Set\(setCount)" 
let value = data[keyedPath] 

var goodSetsCount = "Set\(setCount)" 
data[keyedPath] = "Hello" 
data.removeObjectForKey(keyedPath)