- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道这是一个常见问题,也许之前已经问过很多次了。我还知道如何通过启用应用程序组使用核心数据与应用程序扩展共享单个数据库。我现在正在使用 NSPersistentCloudKitContainer
同步数据(跨 iCloud 设备),效果很好。
但我想与我的应用程序扩展(今天的扩展)共享我的数据库,此时应用程序组将不再有帮助,因为它们是 Apple 描述的不同技术。因此,我只是从签名和功能 Pane 中为容器应用程序和应用程序扩展启用了 iCloud。然后我可以从两个应用程序容器/扩展访问我的单一数据库,如下所示:
// MARK: - Core Data stack, Shared database
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "MyApp")
// Spotlight search support and history tracking
container.persistentStoreDescriptions.forEach {
$0.setOption(CoreDataSpotlightSearchDelegate.init(forStoreWith: $0, model: container.managedObjectModel), forKey: NSCoreDataCoreSpotlightExporter)
$0.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
}
// Load persistent store
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
container.viewContext.automaticallyMergesChangesFromParent = true
return container
}()
但是它仅在设备在线时有效(这是预期的行为),所以我的问题是:
是否可以在设备离线时使用 NSPersistentCloudKitContainer
在应用程序和扩展程序之间共享我的数据库?一些解决方法?
编辑
这是一个非工作版本,我可以访问相同的数据库但没有云同步(未出现在 CloudKit 仪表板上):
// MARK: - Core Data stack, Shared database
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "MyApp")
// Shared container support
if let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.company.MyApp")?.appendingPathComponent("MyApp.sqlite") {
let persistentStoreDescription = NSPersistentStoreDescription.init(url: url)
container.persistentStoreDescriptions = [persistentStoreDescription]
}
// Spotlight search support and history tracking
container.persistentStoreDescriptions.forEach {
$0.setOption(CoreDataSpotlightSearchDelegate.init(forStoreWith: $0, model: container.managedObjectModel), forKey: NSCoreDataCoreSpotlightExporter)
}
// Load persistent store
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
container.viewContext.automaticallyMergesChangesFromParent = true
return container
}()
最佳答案
要在应用程序和扩展程序之间共享数据库,您需要完全实现持久性历史记录跟踪;它不像启用商店选项那么简单。有关该功能的介绍,请参阅 WWDC 2017 What's New in Core Data在 20:49 并查看文档 Consuming Relevant Store Changes特别是“将相关事务合并到上下文中”。
关于为什么您在使用 NSPersistentCloudKitContainer
时没有注意到问题的理论是,当您的商店在线并与云同步时,您正在受益于云同步运行的副作用您的应用进程和在恢复时编辑商店,这反过来又导致您的上下文得到更新。
顺便说一句,NSPersistentHistoryTrackingKey
选项默认设置为 NSPersistentCloudKitContainer
的商店描述有 cloudKitContainerOptions
就像默认的第一个商店说明有。
关于swift - NSPersistentCloudKitContainer:与 App Extension 共享单个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63008735/
我正在构建一个使用 NSPersistentCloudKitContainer 的应用程序。该应用程序没有共享功能,其唯一的后端功能是使用 cloudkit 容器在用户设备之间同步数据。该设置相当准系
我在我的生产应用中使用了 NSPersistentCloudKitContainer,但我的一些用户告诉我,在更新到引入了 NSPersistentCloudKitContainer 的最新版本后,数
我最近发布了一个使用 NSPersistentCloudKitContainer 的应用程序.在开发中,我的数据库按预期跨设备同步,但在生产中,我的数据库根本没有同步。调试完情况后,我意识到我必须将
我已将日期触发的本地通知添加到我的应用程序中,现在我希望用户能够在其拥有该应用程序的所有设备上获得他们在一台设备上设置的通知。我将他们设置的通知保存在核心数据实体中(保存通知标识符和它应该被触发的日期
我正在努力解决以下问题。尽管进行了深入搜索,但我还没有成功。 我的开发环境是 macOS Big Sur Beta 下的 Xcode 12.0 beta(但是,问题在 Catalina 下的 Xcod
集成 NSPersistentCloudKitContainer 非常简单,当用户在实现同步后添加数据时工作正常。但是,如果用户已经在不同的设备上添加了相同的数据,并且将在更新时启用同步,则所有设备上
我正在开发一个使用 NSPersistentCloudKitContainer 的应用程序在设备之间共享数据。核心数据模型有多个实体,其中两个实体通过与其各自逆的关系连接。我遇到的问题是,当我将关系设
所以我的问题如标题中所写,如果你可以使用 NSPersistentCloudKitContainer 在不同的应用程序之间共享数据,比如如果你有一个不同的 iPad 应用程序,一个不同的 iPhone
所以我的问题如标题中所写,如果你可以使用 NSPersistentCloudKitContainer 在不同的应用程序之间共享数据,比如如果你有一个不同的 iPad 应用程序,一个不同的 iPhone
Apple 推出了 NSPersistentCloudKitContainer iOS 13 使我们能够将 CloudKit 与 Core Data 结合使用。我几乎可以立即在不同的设备上运行它,但我
我正在使用 NSPersistentCloudKitContainer 来同步数据。使用新的 iCloud 内容刷新 UITableView 内容的正确代码是什么?如果我关闭 UITableView
我正在使用 NSPersistentCloudKitContainer 通过 CloudKit 在不同设备之间同步数据。它适用于新项目,但是当我将它用于旧项目时,使用 NSPersistentCont
我遵循了与“将核心数据与 CloudKit 结合使用”中相同的步骤: 新项目 启用核心数据 + Cloud Kit 添加 iCloud/CloudKit 授权 + 后台模式/远程通知授权。 在 iPh
我正在开发一个应用程序,该应用程序使用 NSPersistentCloudKitContainer 在 iOS 15 中使用新的共享支持.我没有办法告诉 Core Data 一个对象或一组对象不再共享
我正在使用 NSPersistentCloudKitContainer 通过 CloudKit 和 CoreData 在用户之间同步和共享一些记录。从 Apple website 中根据我的需要调整示
我正在使用 NSPersistentCloudKitContainer 通过 CloudKit 和 CoreData 在用户之间同步和共享一些记录。从 Apple website 中根据我的需要调整示
我知道这是一个常见问题,也许之前已经问过很多次了。我还知道如何通过启用应用程序组使用核心数据与应用程序扩展共享单个数据库。我现在正在使用 NSPersistentCloudKitContainer 同
我无法将令人兴奋的核心数据堆栈更改为 NSPersistentCloudKitContainer,因为这只是 iOS 13 及更高版本的支持功能,但我希望为 iOS 13 及更高版本设置该设置,同时为
我正在尝试使用 Core Data 和 CloudKit 构建一个非常基本的应用程序。我在我的 Mac 上登录了我的 CloudKit 帐户,然后按照说明运行 Apple 在他们的 website 上
我正在为我的核心数据应用程序使用 NSPersistentCloudKitContainer。在测试期间,我检查了在设备上所做的更改是否会在几秒钟内同步到 CloudKit。 但是,当我在设备上禁用
我是一名优秀的程序员,十分优秀!