Я слишком долго сидел на проблеме, и я действительно не понимаю, почему это происходит. Я искал в Интернете решения, и я пробовал каждый из них, и все же я получаю эту проблему. Я инициализирую словарь в Swift, а затем добавляю в него некоторые значения, но сразу после добавления ключей/значений словарь пуст (проверка в режиме отладки), а также нуль в коде при попытке прочитать из него , Это мой текущий код:Swift Словарь заполнен, но все еще пуст
я сначала получить PLIST, где я хочу добавить мой словарь:
var path = NSBundle.mainBundle().pathForResource("Questions", ofType: "plist")
var dict = NSDictionary(contentsOfFile: path!)!
var questionsArr = dict.objectForKey("Math") as NSArray
var questionsMutableArray:NSMutableArray = questionsArr.mutableCopy() as NSMutableArray
Затем я создаю и добавить значения в моем словаре
//I have also tried with this and got the same result: var newDict = Dictionary<String, String>()
var newDict = [String: String]()
newDict["Question"] = "What is 1+1"
newDict["A"] = "One"
newDict["B"] = "Two"
newDict["C"] = "Three"
newDict кажется пустым в режиме отладки прямо здесь. Тогда я пишу словарь в мой PLIST:
questionsMutableArray.addObject(newDict)
questionsMutableArray.writeToFile(path!, atomically: true)
Позже в коде я получаю мой PLIST вроде этого (который работал раньше, когда я еще не добавил newDict:
var path = NSBundle.mainBundle().pathForResource("Questions", ofType: "plist")
var dict = NSDictionary(contentsOfFile: path!)!
На последнем линия (NSDictinoary (contentsOfFile:! путь) Я получаю эту ошибку:?!
fatal error: unexpectedly found nil while unwrapping an Optional value
кто-нибудь знает, почему это происходит Помощь будут оценены
РЕДАКТИРОВАТЬ Раствор в 4)
1. I'm getting an array of dictionaries from my plist (Questions).
2. I add a new dictionary to my array of dictionaries.
3. I write/save it to the plist.
4. I get the array from the plist again and investigate the content of it.
5. The new dictionary I just added is not there.
Это код:
1) questionsArr пуст
var bundlepath:NSString = NSBundle.mainBundle().pathForResource("Questions", ofType: "plist")!
var dict = NSMutableDictionary(contentsOfFile: bundlepath)!
var questionsArr = dict.objectForKey("Math") as NSArray
var questionsMutableArray:NSMutableArray = questionsArr.mutableCopy() as NSMutableArray
2) questionsMutableArray ш как пустой, и теперь в нем возникает новый вопрос.
var newDict = [String: String]()
newDict["QuestionTitle"] = "What is 1+1?"
newDict["A"] = "One"
newDict["B"] = "Two"
newDict["C"] = "Three"
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
var path:NSString = documentsPath.stringByAppendingPathComponent("Questions.plist");
questionsMutableArray.addObject(newDict)
dict["Math"] = questionsMutableArray
3)
let didItSave = dict.writeToFile(path, atomically: true)
4) questionsArr еще пуст. Если я использую «путь» вместо «bundlepath», он работает!
dict = NSMutableDictionary(contentsOfFile: bundlepath)! //<- I USED 'path' INSTEAD OF 'bundlepath' and now it works!
questionsArr = dict.objectForKey("Math") as NSArray
Можете ли вы показать код, где вы его найдете. Опубликованный код не помогает идентифицировать проблему. –
Не уверен, как это работает быстро, но ваш словарь должен быть «изменен», если вы хотите добавить к нему материал. – user3386109
Изменчивость коллекции в Swift определяется тем, присвоили ли вы словарь переменной или константе, а не по имени класса, как в Objective-C. –