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>