2016-12-02 42 views
0

我想在Swift 3中將一個NSMutableDictionary的內容寫入plist。這是我在Objective-C中使用的結構,但它在Swift中不起作用。運行下面的代碼時,會導致錯誤。有沒有人知道這裏可能會出現什麼問題?爲什麼寫入plist在Swift中失敗?

let array1 = "\(Int(Value1))" 
let array2 = "\(Int(Value2))" 

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
let plistpath = NSURL(fileURLWithPath: paths[0]).appendingPathComponent("myplist9.plist")!.absoluteString 

let dictionary: NSMutableDictionary = ["String":"String"] 
dictionary["Value 1"] = array1 
dictionary["Value 2"] = array2 

if dictionary.write(toFile: plistpath, atomically: false) { 
    print("Success") 
} 
else { 
    print("Error") 
} 
+0

爲什麼不簡單使用URL相關API來編寫文件?並注意數組中的文字「可選(12)」字符串。 – vadian

+0

@vadian查看我答案的最後一句。 :) – rmaddy

回答

2

你不能讓一個NSURL使用absoluteString方法轉換爲文件路徑。您需要使用path方法。

變化:

let plistpath = NSURL(fileURLWithPath: paths[0]).appendingPathComponent("myplist9.plist")!.absoluteString 

到:

let plistpath = NSURL(fileURLWithPath: paths[0]).appendingPathComponent("myplist9.plist")!.path 

而且,由於使用的是斯威夫特3,使用URL,不NSURL

let plistpath = URL(fileURLWithPath: paths[0]).appendingPathComponent("myplist9.plist")!.path 

或者你可以使用NSDictionary write(to:atomically:)方法,它接受URL

+0

這工作。感謝您及時的回覆! –

相關問題