SWIFT:初始写入/删除后无法删除 Plist 文件

Posted

技术标签:

【中文标题】SWIFT:初始写入/删除后无法删除 Plist 文件【英文标题】:SWIFT: Could not delete Plist file after initial write / deleting 【发布时间】:2015-06-24 15:28:23 【问题描述】:

我尝试在值更改时更新我的​​ plist。 但只有在第一次没有 plist 文件的时候,我才能成功地用 writeToFile 保存我的数据:

    var initDic: NSMutableDictionary = [
        "gMaxRootDir":        gMaxRootDir
        "gKeepNumber":        gKeepNumber
    ]


    if plistExist 
        var error: NSError?
        if !filemgr.removeItemAtPath(plistpath, error: &error) 
            println("plistpath: Remove failed: \(error!.localizedDescription)")
        
    

    if initDic.writeToFile(plistpath, atomically: false) == false 
        println("plistpath: Save failed")
    

创建并再次删除文件后是否有东西锁定了文件?我没有把它覆盖。因此,即使更新数据也可以。

【问题讨论】:

【参考方案1】:

使用 getter 和 setter。 获取所有旧数据并保存新数据!!! 例如,您在 plist 文件中有 2 行:userNumber 和 userName

func getUserNumber() -> Int
        var userNumber = 0
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
        let documentsDirectory = paths.objectAtIndex(0) as! NSString
        let path = documentsDirectory.stringByAppendingPathComponent("fileName.plist")

        var myDict = NSDictionary(contentsOfFile: path)
        if let dict = myDict 
            userNumber = dict.objectForKey("userNumber") as! Int
        
        return userNumber
    




func setUserName(userName: String)
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
        let documentsDirectory = paths.objectAtIndex(0) as! NSString
        let path = documentsDirectory.stringByAppendingPathComponent("fileName.plist")

        var dict: NSMutableDictionary = ["userNumber": getUserNumber()]
        dict.setObject(userName, forKey: "userName")
        dict.writeToFile(path, atomically: false)
        let resultDictionary = NSMutableDictionary(contentsOfFile: path)
    

这不是这个问题的最佳解决方案,但它是工作! 如果您可以使用 CoreData 并将您的数据保存在本地数据库中

祝你好运

【讨论】:

插入代码后,运行良好。把它换成我的物品后,它就不起作用了。经过很长时间在下一个添加一个语句后,我发现您无法在此 plist 中保存类型 NSURL。所以没有那种类型,即使我的旧版本也能正常工作。谢谢你的提示。

以上是关于SWIFT:初始写入/删除后无法删除 Plist 文件的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit Swift 2 无法写入 plist

更新 Plist 数据而不删除旧数据

Swift 2:使用多维对象写入 plist

从 uitableview 中删除 + 写入 plist 不起作用

从 plist 错误 Swift 加载

在 Swift 中写入 Plist