初心者(?)の質問はこちら。StackOverflow を検索していくつかの解決策を試しましたが、この問題を解決できませんでした。ターゲットにアプリ グループ機能を追加した後に作成されたアプリ グループ ディレクトリに何も保存できません。
ただし、ドキュメントディレクトリに書き込もうとすると、保存は正常に機能します。以前、単純な JSON 永続性に切り替える前は、Core Data を使用していたときにアプリ グループへの書き込みと読み取りが正常に機能していました。
添付されているのは、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” could not be open because there is no such file.
繰り返しますが、デフォルトのドキュメント ディレクトリを使用するとすべて機能します。永続化して読み取ることはできますが、アプリ グループ ディレクトリではできません...誰かがここで何が問題なのかを指摘していただければ幸いです!