- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有带有持久容器的主上下文、持久编辑上下文(主上下文的子上下文)和用于长时间同步的专用同步上下文。
然后我在编辑上下文中创建和对象 -> 将其保存到主上下文 -> 将这些更改发送到服务器 -> 从服务器接收更新的更改 -> 更新编辑上下文
我用
context.automaticallyMergesChangesFromParent = true
但我也尝试过手动合并。
@objc private func contextSave(_ notification: Notification) {
let updated = (notification.userInfo?[NSUpdatedObjectsKey] as? Set<NSManagedObject>)?
.filter { $0 as? Order != nil }
.map { $0 as! Order }
updated?.forEach { order in
Logger.shared.log("UPDATED FROM NOTIFICATION \n\n----\n\(order.objectID) \(order)\n-----\n\n")
}
localManagedContext.performAndWait {
let orders = self.fetchInChildContext()
orders.forEach {
Logger.shared.log("LOCAL AFTER NOTIFICATION \n\n----\n\($0.objectID) \($0)\n-----\n\n")
}
}
}
结果:我在编辑上下文中创建并从同步过程中更新的对象即使在主上下文中更新并且在 NSUpdatedObjects 集中也不会更新。
所有其他对象都正确合并。当对象从主上下文中获取时(而不是在子队列中创建)。
这是Edit Context里面的对象
Optional(<BestatterprogrammI.Order: 0x600003f05720> (entity: Order; id: 0x600001cbefc0 <x-coredata:///Order/tBADA027E-D83F-4E34-A741-2EACD7877EE82> ; data: {
这是我在 NSUpdatedObjects 中接收的对象
0xa8dc7e0d815e4391 <x-coredata://57464ABC-24B6-4E34-A992-3B2886E13686/Order/p2361> <BestatterprogrammI.Order: 0x600003ffec10> (entity: Order; id: 0xa8dc7e0d815e4391 <x-coredata://57464ABC-24B6-4E34-A992-3B2886E13686/Order/p2361> ; data: {
我正在相应地保存编辑上下文和同步上下文: //编辑上下文(主队列) localManagedContext.performAndWait { self.repopulateEntitiesID()
do {
if self.localManagedContext.hasChanges {
try self.localManagedContext.save()
if saveParent {
// using .parent on context results
// in unexpected behaviour on iOS 10
try CoreDataHandler.shared.persistentContainer.viewContext.save()
}
callback(.valid)
} else {
callback(.valid)
}
}
// SYNC context (private queue)
if context.hasChanges {
do {
try context.save()
} catch let error {
Logger.shared.logConsole(error)
}
CoreDataHandler.shared.persistentContainer.viewContext.performAndWait {
if CoreDataHandler.shared.persistentContainer.viewContext.hasChanges {
do {
try CoreDataHandler.shared.persistentContainer.viewContext.save()
self.onSyncEventRaised.forEach { $0.value() }
} catch let error {
Logger.shared.logConsole(error)
}
}
}
}
请指出错误以及如何使上下文保持最新(不更改上下文)。
刷新对象会导致意外行为,这些对象在上下文中重复。
我想要的是在 Edit Context 中更新创建的对象并允许用户进一步编辑它。提前致谢。
更新:创建同步上下文(临时):
let syncContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
syncContext.parent = CoreDataHandler.shared.persistentContainer.viewContext
syncContext.perform {
创建编辑上下文(持久的):
let context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
context.parent = CoreDataHandler.shared.persistentContainer.viewContext
context.retainsRegisteredObjects = true
context.automaticallyMergesChangesFromParent = true
最佳答案
受以下影响:Core Data: Do child contexts ever get permanent objectIDs for newly inserted objects?
同样的问题出现在这里:Core Data merge two Managed Object Context
基本上我所拥有的 - 在编辑上下文中创建的对象有一个临时 ID,但在主上下文中的对象有一个永久 ID。
所以 Core Data 认为这是两个不同的对象,所以不会合并。解决方案 - 在保存之前为插入的对象提供永久 ID。
localManagedContext.performAndWait {
self.repopulateEntitiesID()
do {
if self.localManagedContext.hasChanges {
// all inserted objects must get permanent ID to be updated
// from other contexts before fetching it from persistent store directly
let insertedObjects = Array(self.localManagedContext.insertedObjects)
try self.localManagedContext.obtainPermanentIDs(for: insertedObjects)
try self.localManagedContext.save()
if saveParent {
try CoreDataHandler.shared.persistentContainer.viewContext.save()
}
callback(.valid)
} else {
callback(.valid)
}
}
catch let error {
Logger.shared.logConsole(error)
callback(.error)
}
}
关于ios - 核心数据上下文合并(在子上下文中创建的对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901216/
出现以下错误 Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable D
在调试应用程序时出现以下错误。 The CLR has been unable to transition from COM context 0x3b2d70 to COM context 0x3b2
在 GAE Go 中,为了记录,我们需要使用 appengine.NewContext(r) 创建一个新的上下文,它返回 context.Context。 如何使用此上下文在请求范围内设置/获取变量?
我想使用 Puppeteer 从放置在页面上 iframe 内的选择器中获取数据,该页面在与其父框架域不同的域上运行。因此,我不是任何域的所有者 - 无法使用 frame.postMessage。 试
我正在尝试获取可用的应用程序上下文并想切换到 webview 上下文,但 appium 仅获取 Navive App。 应用程序还启用了 WebView。 Appium 版本:1.10.1 Chrom
这个问题在这里已经有了答案: How to fix this nullOk error when using the flutter_svg package? (7 个回答) 7 个月前关闭。 当我尝
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
这是代码 obj = { a: 'some value'; m: function(){ alert(this.a); } } obj.m(); 结果是'som
我正在尝试做类似的事情 $(".className").click(function() { $(this).(".anotherClass").css("z-index","1");
var User = { Name: "Some Name", Age: 26, Show: function() { alert("Age= "+this.Age)}; }; fun
我目前正在使用我见过的常见 Context 模式,它允许子组件通过传递修饰函数来更新父组件的状态(即 Provider)通过共享的 Context。 我遇到的问题是,修改函数只引用原始状态,不引用最新
有没有办法让 React Context类型安全与流类型? 例如: Button.contextTypes = { color: React.PropTypes.string }; 最佳答案 不幸
我想知道是否有一种方法可以为不同的功能使用不同的上下文类。 我希望有一个功能使用 MinkExtensions 进行浏览器测试,另一个功能使用和 HTTP 客户端(如 Guzzle)进行 API 测试
我有这个配置文件 apiVersion: v1 clusters: - cluster: server: [REDACTED] // IP of my cluster name: stag
我在实现非抢先式调度时遇到了用于初始化TCB的代码。 typedef struct TCB_t { struct TCB_t *next; struct TCB_t
我想将一个函数设置为数组中每个元素的属性,但使用不同的参数调用它。我想我会使用匿名函数来解决它: for ( var i = 0; i < object_count; i++ ) { obje
这个问题已经有答案了: How to access the correct `this` inside a callback (15 个回答) 已关闭 7 年前。 我正在做一些练习,但我在管道方法中丢
我正在尝试通过 Java 和 Android Studio 学习和制作 Android 应用程序。我对Java的了解程度是两年前几个小时的youtube学习和大学基础类(class)。不过我确实知道如
我在(这个)上遇到了问题。错误ImageView无法应用。我在 fragment 类中执行此代码。 ViewFlipper v_flipper; @Nullable @Override public
我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖性的情况下创建它(不是对 Windows,也不是某些包[SDL,SFML,GLUT])?只允许使用没有外部库的库,就像
我是一名优秀的程序员,十分优秀!