【问题标题】:Bundle.main.url is unable to locate plist saved with PropertyListSerializationBundle.main.url 无法找到使用 PropertyListSerialization 保存的 plist
【发布时间】:2020-11-25 04:00:16
【问题描述】:

我正在读取和写入 plist,但两个进程之一无法正常工作。

阅读

var data: [String: Int] = [:]
if let url = Bundle.main.url(forResource: "Calendar", withExtension: "plist") {
    do {
        print("url: \(url)")
        let dataContent = try Data(contentsOf: url)
        if let dict = try PropertyListSerialization.propertyList(from: dataContent, format: nil) as? [String: Int] {
            data = dict
        }
    } catch {
        print(error)
    }
}

url 此处未打印,这意味着Bundle.main.url 无法找到Calendar.plist 或未正确保存。

写作

do {
    let path = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("Calendar.plist")
    let plistData = try PropertyListSerialization.data(fromPropertyList: data, format: .xml, options: 0)
    try plistData.write(to: path)
} catch {
    print(error)
}

data 暂定为["test": 1]

【问题讨论】:

    标签: ios swift plist nsfilemanager


    【解决方案1】:

    这是你正在做的事情:

    • 阅读时,您从应用的捆绑包根文件夹中读取了您的Calendar.plist
    • 写入时,将Calendar.plist 写入应用程序包的Documents 文件夹。

    由于应用程序的捆绑根文件夹(从您正在阅读的位置)对您来说是不可写的,因此您的 Calendar.plist 的正确位置是 Documents 文件夹,您应该在同一文件夹中为其创建 URL 或路径就像你在写作时做的那样,最好在你从读写例程中调用的专用 getter 中。

    func calendarURL() -> URL? {
        guard let result = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("Calendar.plist") else { return nil }
        return result
    }
    

    阅读

    var data: [String: Int] = [:]
    if let url = calendarURL() {
        ...
    

    写作

    if let path = calendarURL() {
        do {
            let plistData = try PropertyListSerialization.data(fromPropertyList: data, format: .xml, options: 0)
            ... 
    

    【讨论】:

      猜你喜欢
      • 2011-11-13
      • 1970-01-01
      • 2022-11-27
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 2013-03-18
      相关资源
      最近更新 更多