UPDATE:
Для переноса существующего постоянного хранилища NSPersistentContainer
содержит persistentStoreCoordinator
, экземпляр NSPersistentStoreCoordinator
. Это предоставляет метод migratePersistentStore:toURL:options:withType:error:
для миграции постоянного хранилища.
Я бы сделал следующее:
// Get the reference to the persistent store coordinator
let coordinator = persistentContainer.persistentStoreCoordinator
// Get the URL of the persistent store
let oldURL = persistentContainer.persistentStoreDescriptions.url
// Get the URL of the new App Group location
let newURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("YOUR_APP_GROUP")
// Get the reference to the current persistent store
let oldStore = coordinator.persistentStore(for: oldURL)
// Migrate the persistent store
do {
try coordinator.migratePersistentStore(oldStore, to: newURL, options: nil, withType: NSSQLiteStoreType)
} catch {
// ERROR
}
Обратите внимание, что вышеперечисленное не было проверено, и я не обрабатывал дополнительные, поэтому он не завершен Кроме того, я прошу прощения за это в Свифте. Надеюсь, вам достаточно легко написать эквивалент в Objective-C.
ОРИГИНАЛ:
Ниже описано, как создать интерфейс NSPersistentContainer
для постоянного хранилища в месте, отличном от используемого по умолчанию.
NSPersistentContainer
выставляет defaultDirectoryURL
и заявляет:
Этот метод возвращает зависящий от платформы NSURL
, при котором постоянный
Магазин (ы) будет расположен или в настоящее время находятся. Этот метод может быть
переопределено в подклассе NSPersistentContainer
.
Если вы создаете подкласс NSPersistentContainer
и определяете defaultDirectoryURL
как каталог группы приложений, используя containerURLForSecurityApplicationGroupIdentifier
, вы сможете получить доступ к контейнеру между вашим приложением и расширениями (при условии, что они имеют одинаковые права для группы приложений).
NSPersistentContainer
также предоставляет persistentStoreDescriptions
, который также содержит экземпляр URL. Аналогично, вы можете обновить его до URL группы приложений перед вызовом loadPersistentStoresWithCompletionHandler:
.
Обратите внимание, что я не использовал NSPersistentContainer
и не знаю, вызовет ли это совместное использование какие-либо проблемы с параллелизмом.