Как сохранить файл в общей группе приложений на iOS и прочитать из него

Я сохраняю свои данные из своего основного приложения в файле, который хранится где-то в userDomainMask.

NSKeyedArchiver.archiveRootObject(stops, toFile: BusStop.ArchiveURL.path)

и это в моем файле класса BusStop

static let DocumentsDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.appendingPathComponent("stops")

Теперь я хочу прочитать эти данные из моего расширения «Сегодня» и возвращаемого им пустого набора [], поэтому я знаю, в чем проблема. Мне нужно сохранить эти данные в общей группе приложений, к которой принадлежат и мое расширение, и приложение.

Как сохранить данные и прочитать их?

Я хочу сохранить массив экземпляров моего класса BusStop.

РЕДАКТИРОВАТЬ:

Я исправил свою проблему!

Используйте это решение:

static let ArchiveURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.asd.asd.asd")!
    .appendingPathComponent("mypath")

и каждый раз, когда вы выполняете какую-либо операцию с уже сохраненными данными или сохраняете новый контент, используйте это решение:

https://stackoverflow.com/a/37162883/3595696

Ваше здоровье!


person pawisoon    schedule 28.04.2017    source источник
comment
Вы сохранили свой файл в каталоге документов?   -  person KKRocks    schedule 28.04.2017
comment
@KKRocks да, там статический пусть DocumentsDirectory = FileManager().urls(для: .documentDirectory, в: .userDomainMask).first!   -  person pawisoon    schedule 28.04.2017
comment
почему вы использовали для этого archiveRootObject?   -  person KKRocks    schedule 28.04.2017
comment
@KKRocks Этот код взят из учебника Apple. В метод saveMeals() добавьте следующую строку кода:developer.apple.com/library/content/referencelibrary/   -  person pawisoon    schedule 28.04.2017


Ответы (1)


Настройте группу приложений в Apple Developer Center и включите право (вот как).

Затем получите URL-адрес группы приложений:

guard let groupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: applicationGroupId) else {
    fatalError("could not get shared app group directory.")
}

и использовать его для хранения общих файлов.

person shallowThought    schedule 28.04.2017
comment
как реализовать? - person pawisoon; 28.04.2017
comment
Что ты имеешь в виду? Сохраняйте все, чем хотите поделиться, в groupURL. Какую часть реализации вам не хватает? - person shallowThought; 29.04.2017