2016-03-30 22 views
0

文字配列の定義を含むplistファイルにデータを保存しようとしています。私のplist - enter image description here[String:String?]型の値を期待される引数型に変換できません[String:String]

私の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) 

答えて

1

私の推測ではlinkBookcovertitlePageyearisbnすべてはあなたのUIのテキストフィールドを表しているのですか? textのいずれかのプロパティには、オプション文字列(String?)の種類があります。 plistArray変数のタイプは[String, String]です。キーも値もnilにはなりません。

上記のいずれかの項目のtextプロパティがnilの場合、基本的には何をすべきかの質問に答える必要があります。空ではない場合がありますが、その場合には感嘆符を付け加えることができますlinkBook.text!cover.text!など

これを行うと、いずれかがクラッシュすることがあります。

代わりに、??演算子を使用することをお勧めします。これまでのいずれかがnilであるならば、あなたはあなたのplistに空の文字列を取得しますその方法

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

:としてあなたの辞書を設定します。

0

textfield.textはオプションです。だからまずそれを解くべきです。

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

+0

'xxx.text'プロパティのいずれかがこれまでにnilの場合、この変更で、アプリケーションがクラッシュすることに注意してください。 –

+0

私はクラッシュすることは理解していますが、クラッシュを避けるために適切な措置を講じることができます。テキストフィールドが空でない場合にだけ、辞書を作成してください。 –

関連する問題