首页 > 解决方案 > 应用程序 ID 和读/写文件

问题描述

我正在从我的 iOS 应用程序中写入和读取文件:

func saveChecklistItems() {
    let data = NSMutableData()
    let archiver = NSKeyedArchiver(forWritingWith: data)
    archiver.encode(items, forKey: "ChecklistItems")
    archiver.finishEncoding()
    print("save \(dataFileDir())")
    data.write(toFile: dataFileDir(), atomically: true)
}

func loadChecklistItems() {

    print("load \(dataFileDir())")
    let path = dataFileDir()
    if FileManager.default.fileExists(atPath: path) {
        if let data = NSData.init(contentsOfFile: path) {
            do {
                let unarchiver = try NSKeyedUnarchiver(forReadingFrom: data as Data)
                items = unarchiver.decodeObject(forKey: "ChecklistItems") as! [CheckListItem]
                unarchiver.finishDecoding()
            } catch {
                print(error)
            }                
        }
    }
}

func documentsDirectory() -> String {
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as [String]
    return paths[0]
}

func dataFileDir() -> String {
    return documentsDirectory().appending("Checklists.plist")
}

但是每次我在 Xcode 中按 Run 时,应用程序都会使用新 ID 部署在我的 iPhone 上:

保存 /var/mobile/Containers/Data/Application/4684F231-7A41-461C-AD5C-FB0F66A9DA31/DocumentsChecklists.plist

加载/var/mobile/Containers/Data/Application/CFE42D59-6F3F-4D47-96B5-4F81C640127A/DocumentsChecklists.plist

这是我在 iOS 开发中的第一步,我想知道在这种情况下我需要做什么?将应用程序 ID 设置为静态?或者是其他东西 ?

标签: iosswift

解决方案


我建议您在处理文件夹和文件时使用 URL 而不是字符串

func documentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    return paths[0]
}

func dataFileDir() -> URL {
    return documentsDirectory().appendingPathComponent("Checklists.plist")
}

并将您的写入更改为

try data.write(to: dataFileDir(),  options: .atomic)

推荐阅读