2016-01-28 2 views
4

У меня есть этот код (портирование с другого языка, следовательно, несколько иные соглашения об именах, но, пожалуйста, медведь с этим в настоящее время)Swift iOS NSDictionary setValue crash - но почему?

var FDefaultsList: NSDictionary = [String:String](); 
let TmpKey: String = TmpKeyValue[0]; 
let TmpValue: String = TmpKeyValue[1];  
if (TmpKey != "") && (TmpValue != "") { 
    //let TmpAnyObjectValue: AnyObject? = TmpValue; 
    //FDefaultsList.setValue(TmpAnyObjectValue, forKey: TmpKey); 
    FDefaultsList.setValue(TmpValue, forKey: TmpKey); 
} 

Однако, независимо от того, который SetValue вариант я использую, вызов SetValue кидает ошибка (не имеет смысла, насколько я могу сказать) и выезды с приложением (редактор Xcode берется класса AppDelegate: UIResponder, UIApplicationDelegate)

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

+0

использование FDefaultsList [ TmpValue] = TmpKey & only использовать словарь из swift, а не NSDictionary. –

+0

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

+0

Я хочу (изменяемый) словарь, где я могу читать/писать строковые ключи/значения. Я попытаюсь прочитать о плюсах/минусах словаря cocoa/obj-c (?) По сравнению с быстрым словарем. – Tom

ответ

5

Вы должны объявить фактический NSMutableDictionary вместо того, чтобы кастинг в NSDictionary.

И вы можете использовать подстрочный, который немного проще в использовании, чем setValue (которые фактически должны быть setObject):

var FDefaultsList = NSMutableDictionary() 
let TmpKey: String = "a" 
let TmpValue: String = "b" 
if TmpKey != "" && TmpValue != "" { 
    FDefaultsList[TmpValue] = TmpKey 
} 

Более версия "Swifty" может быть:

var defaultsList = [String:String]() 
let tmpKey = "a" 
let tmpValue = "b" 
if !tmpKey.isEmpty && !tmpValue.isEmpty { 
    defaultsList[tmpValue] = tmpKey 
} 
+0

Спасибо за ваш ответ. Работает сейчас :) – Tom