我知道跨目标访问核心数据时,我需要使用应用程序组和通用的persistentContainer配置。我能够毫无问题地阅读,也可以创建。
但是,当另一个目标创建并保存项目时,我遇到的困难是主应用程序的NSFetchedResultsController
看不到更改。如果我重新启动该应用程序,则将显示数据,因此我知道它已正确存储。我还尝试在主要目标中捕获NSManagedObjectContextDidSave
通知,但这似乎也没有。
NotificationCenter.default.addObserver(forName: Notification.Name.NSManagedObjectContextDidSave,
object: nil,
queue: nil) { notification in
print("Got called")
self.managedObjectContext.mergeChanges(fromContextDidSave: notification)
如何让主要目标中的NSFetchedResultsController知道已从另一个目标中保存了某些内容?
我正在像这样设置persistentContainer:
lazy private var persistentContainer: NSPersistentContainer = {
let groupName = "group.com.contoso.CoolCalendar"
let url = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: groupName)!
.appendingPathComponent("CoolCalendar.sqlite")
let container = NSPersistentContainer(name: "CoolCalendar")
container.persistentStoreDescriptions = [
NSPersistentStoreDescription(url: url)
]
container.loadPersistentStores(completionHandler: { _, error in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()