无法将[String:String?]类型的值转换为预期的参数类型[String:String]

时间:2016-03-30 04:41:59

标签: swift

我正在尝试将数据保存到我的plist文件中,该文件包含字符串数组的定义。我的plist - enter image description here

我将数据写入我的plist的代码是 -

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true) as NSArray

let documentsDirectory = paths.objectAtIndex(0) as! NSString

let path= documentsDirectory.stringByAppendingPathComponent("authors.plist")

let fileManager = NSFileManager.defaultManager( )

var plistArray = NSArray(contentsOfFile: path) as! [Dictionary<String , String>]

var addItem: Dictionary = ["link": linkBook.text , "Cover": cover.text , "title" : titlePage.text , "year" : year.text , "isbn" : isbn.text]

plistArray.append(addItem)
// I am getting the error here 

(plistArray as NSArray).writeToFile(path, atomically: true)

2 个答案:

答案 0 :(得分:1)

我的猜测是linkBookcovertitlePageyearisbn都代表了用户界面中的文字字段?这些东西中的一个或多个的text属性具有可选字符串类型(String?)。 plistArray变量属于[String, String]类型 - 键和值都不能为零。

从根本上说,如果上述某项内容的text属性为nil,您需要回答该怎么做的问题。情况可能是它们永远不会为空,在这种情况下,您可以向它们添加感叹号linkBook.text!cover.text!等。

但是,如果你这样做,而且其中任何一个都是零,那将导致崩溃。

我怀疑你要做的是使用??运算符。将您的字典设置为:

var addItem: Dictionary = ["link": linkBook.text ?? "", 
  "Cover": cover.text ?? "", 
  "title" : titlePage.text ?? "", 
  "year" : year.text ?? "", 
  "isbn" : isbn.text ?? ""]

那样,如果有任何一个nil那么你将获得你的plist中的空字符串。

答案 1 :(得分:0)

textfield.text是可选的。所以你应该先解开它。

var addItem: Dictionary = ["link": linkBook.text! , "Cover": cover.text! , "title" : titlePage.text! , "year" : year.text! , "isbn" : isbn.text!]