Почему я не могу написать в каталог iOS App Group? - PullRequest
0 голосов
/ 27 октября 2019

Начинающий (?) Вопрос здесь. Я искал StackOverflow и пробовал несколько решений, но не смог решить эту проблему - я не могу ничего сохранить в каталог группы приложений, созданный после добавления возможности групп приложений к цели.

Сохранение работает нормально, когда я пытаюсь записать в каталог Document. И ранее, до перехода на простое сохранение 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 или даже функцию createFile (atPath :) FileManager для записи:

Каталог группы существует. Кодировка ошибок: файл «records.json» не существует.

И при попытке использовать функцию getFromJSON для сохранения я получаю: Ошибка декодирования: Не удалось открыть файл «records.json». потому что такого файла нет.

Опять же, все это работает, когда я использую каталог документов по умолчанию, я могу сохранять и читать, но не с каталогом группы приложений ... Я был бы очень признателенесли бы кто-то мог указать, что здесь не так!

...