初学者(?)问题在这里。我搜索了 StackOverflow 并尝试了几种解决方案,但无法解决此问题 - 我无法将任何内容保存到在将 App Groups 功能添加到目标后创建的 App Group 目录中。
当我尝试写入 Document 目录时,保存工作正常。之前,在切换到简单的 JSON 持久性之前,当我使用 Core Data 时,对 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”无法打开,因为没有这样的文件。
同样,当我使用默认文档目录时,这一切都有效,我能够坚持和阅读,但不能使用应用程序组目录......如果有人能指出这里有什么问题,我将不胜感激!