Как перезагрузить данные CoreData в основном приложении из файла sqlite, обновленного расширением приложения? - PullRequest
0 голосов
/ 04 мая 2019

Я в этом сценарии:

  1. Расширение моего приложения (расширение общего доступа) вставляет новую запись, используя CoreData и файл SQLite CoreData, хранящийся в общем каталоге app group.
  2. При переключении обратно в основное приложение основной контекст не обновляется.

Я использовал CoreDataStack.shared.mainContext.reset(), но он не работает.

Мое ядро ​​стека ядра (и мое основное приложение, и расширение приложения используют этот код):

import CoreData

public class CoreDataStack {

    let appID = "xxx"
    let modelFileName = "xxx"
    let defaultAppGroupID = "xxx"

    public static let shared = CoreDataManager()

    public var mainContext: NSManagedObjectContext {
        return mainPersistentContainer.viewContext
    }
    // MARK: - Core Data stack

    lazy var managedObjectModel: NSManagedObjectModel = {
        let bundle = Bundle(for: type(of: self))
        let momdURL = bundle.url(forResource: modelFileName, withExtension: "momd")!
        return NSManagedObjectModel(contentsOf: momdURL)!
    }()

    lazy var mainPersistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: modelFileName, managedObjectModel: managedObjectModel)

        container.persistentStoreDescriptions = [NSPersistentStoreDescription(url: FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: defaultAppGroupID)!.appendingPathComponent("\(modelFileName).sqlite"))]

        container.loadPersistentStores(completionHandler: { (_, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })

        return container
    }()

    public func saveMainContext() {
        let context = mainPersistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }

    fileprivate func applicationDocumentsDirectory() -> URL {
        let fileManager = FileManager.default

        if let url = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.io.wildcat.InfoFlow") {
            return url
        } else {
            let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
            return urls[0]
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...