我有这两个功能。首先,readPlaylist()似乎工作正常。如果plist已经保存在DocumentDirectory中,它将从那里返回,否则它将被复制到路径然后返回。
函数savePlaylist(dict:NSMutableDictionary)接受一个NSMutableDictionary并将其打印出来。此函数使用与readPlaylist()相同的路径代码,因此路径应该是正确的。 然后我尝试将dict写入url。我没有错误,但writeToUrl返回false,当我打印出resultDictionary时,我将原始plist复制到DocumentDirectory,没有进行任何更改。
我也尝试了“旧方式”并使用了writeToFile,但结果相同。
dict包含字符串键,其中包含保存自定义对象的数组值
为什么我不能将我的字典保存到plist?
代码:
func readPlaylist() -> NSMutableDictionary {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! as NSString
let path = NSURL(fileURLWithPath: paths as String).URLByAppendingPathComponent("Playlists.plist")
let fileManager = NSFileManager.defaultManager()
//check if file exists
if !fileManager.fileExistsAtPath(path.path!){
let plistPathInBundle = NSBundle.mainBundle().pathForResource("Playlists", ofType: "plist") as String!
do {
try NSFileManager.defaultManager().copyItemAtPath(plistPathInBundle, toPath: path.path!)
}catch{
print("Error occurred while copying file to document \(error)")
}
} else {
print("Playlists.plist already exits at path.")
}
let resultDictionary = NSMutableDictionary(contentsOfURL: path)
print("Loaded Playlists.plist file is --> \(resultDictionary?.description)")
return resultDictionary!
}
func savePlaylist(dict: NSMutableDictionary) {
print("mydict --> \(dict.description)")
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! as NSString
let path = NSURL(fileURLWithPath: paths as String).URLByAppendingPathComponent("Playlists.plist")
print("test if true or false: \(dict.writeToURL(path, atomically: true))")
dict.writeToURL(path, atomically: true)
let resultDictionary = NSMutableDictionary(contentsOfURL: path)
print("Saved Playlists.plist file is --> \(resultDictionary?.description)")
}
Playlist.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>QuePlayer</key>
<array/>
</dict>
</plist>