1

初心者(?)の質問はこちら。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.

繰り返しますが、デフォルトのドキュメント ディレクトリを使用するとすべて機能します。永続化して読み取ることはできますが、アプリ グループ ディレクトリではできません...誰かがここで何が問題なのかを指摘していただければ幸いです!

4

0 に答える 0