【问题标题】:SWIFT: Could not delete Plist file after initial write / deletingSWIFT:初始写入/删除后无法删除 Plist 文件
【发布时间】: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")
    }

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

【问题讨论】:

    标签: swift plist


    【解决方案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。所以没有那种类型,即使我的旧版本也能正常工作。谢谢你的提示。
    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 2017-02-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多