为什么无法写入iOS App Group目录?

时间:2019-10-27 16:03:46

标签: ios swift nsfilemanager ios-app-group jsonencoder

Beginner(?)问题在这里。我搜索了StackOverflow,并尝试了几种解决方案,但无法解决此问题-我无法将任何内容保存到将App Groups功能添加到目标后创建的App Group目录中。

但是,当我尝试写入Document目录时,保存工作正常。而且,在我使用Core Data之前,在切换到简单的JSON持久性之前,对App Groups的写入和读取工作正常。

我的代码附在DataManager单例类中:

func getAppGroupURL() -> URL {
    if let groupUrl = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.myName.appName") {
        print("Group Directory exists.")
        return groupUrl.appendingPathComponent("group.com.myName.appName")
    } else {
        print("Couldn't find directory, reverting to default.")
        let appUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        return appUrl
    }
}    


func saveToJSON(entries: [Entry]) {

    let groupURL = DataManager.shared.getAppGroupURL()
    let jsonURL =    groupURL.appendingPathComponent("entries").appendingPathExtension("json")
    let encoder = JSONEncoder()
    encoder.outputFormatting = .prettyPrinted

    do {            
        let jsonData = try encoder.encode(entries)
        try jsonData.write(to: jsonURL)

        print("Encoded JSON data is:")
        print(String(data: jsonData, encoding: .ascii)!)

    } catch {
        print("Error encoding: " + error.localizedDescription)
    }
}

func getFromJSON() -> [Entry]? {
    let groupURL = DataManager.shared.getAppGroupURL()
    let jsonURL = groupURL.appendingPathComponent("entries").appendingPathExtension("json")

    let decoder = JSONDecoder()
    decoder.keyDecodingStrategy = .convertFromSnakeCase
    decoder.dateDecodingStrategy = .secondsSince1970

    do {
        let data = try Data(contentsOf: jsonURL)
        print("JSON data is: " + String(data: data, encoding: .ascii)!)
        let entries = try decoder.decode([Entry].self, from: data)
        print("Decoded JSON data is: \(entries)")
        return thingItems
    } catch {

        print("Error decoding: " + error.localizedDescription)
        return nil
    }
}

当我尝试使用saveToJSON函数或什至使用FileManager的createFile(atPath :)函数编写时,出现此错误消息:

组目录存在。 错误编码:文件“ entries.json”不存在。

当尝试使用getFromJSON函数进行保存时,我得到: 解码错误:由于没有这样的文件,因此无法打开“ entries.json”文件。

同样,当我使用默认的文档目录时,所有内容都可以使用,我可以持久读取,但对于应用程序组目录则不行...如果有人指出这里出了问题,我将不胜感激!< / p>

0 个答案:

没有答案