- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 CoreData 并具有多个后台上下文 (NSManagedObjectContext) 的应用程序。
在编写一些测试时,我观察到一种奇怪的行为,这似乎与官方文档存在争议:一个上下文中的更改会自动传播到另一个上下文,而 .automaticallyMergesChangesFromParent 在两个上下文中都设置为 false。
两个上下文都是从 NSPercientContainer 接收的 - 一个来自 .viewContext,另一个 - 使用 .newBackgroundContext() 函数。
如save说,在上下文保存时,更改将提交到上下文的父存储,即 NSPercientContainer。
但事实上,更改也会出现在另一个上下文中,尽管事实上automaticMergesChangesFromParent == false(它是默认值)。
let persistentContainer = NSPersistentContainer(name: "TESTING")
let mainContext = persistentContainer.viewContext
let otherContext = persistentContainer.newBackgroundContext()
//test entity is created on anotherContext
let entity: TestEntity = NSEntityDescription.insertNewObject
(forEntityName: String(describing: TestEntity.self),
into: anotherContext) as! TestEntity
entity.statusCode = "Testing"
//prepare fetch request for test entity
let fetchReq: NSFetchRequest<TestEntity> = TestEntity.fetchRequest()
fetchReq.predicate = NSPredicate(format: "statusCode = %@",
argumentArray: ["Testing"])
//ensure that entity is not present in mainContext
let entityFromMain = try! mainContext.fetch(fetchReq)
XCTAssertEqual(entityFromMain.count, 0)
//save context that has entity
try! otherContext.save()
//ensure that changes from parent store aren't merged automatically
XCTAssertFalse(mainContext.automaticallyMergesChangesFromParent)
//get inserted entity from mainContext
let entityOnMainAfterSaving = try! mainContext.fetch(fetchReq)
//entity is present in mainContext
XCTAssertTrue(entityOnMainAfterSaving.count > 0)
预期输出 -entityOnMainAfterSaving 不应包含新创建的实体,但它已经存在,尽管 mainContext 未刷新。
更新:我问这个是因为在我的应用程序中存在一种情况:
1.实体的属性在otherContext中被改变
2. otherContext被保存
3.通过viewContext接收实体
4. 属性的值未更新为 p.1 中的状态 (!)
同时,如果在 p.3 中获取之前调用 viewContext.refreshAllObjects(),属性的值将会更新
最佳答案
您似乎混淆了automaticallyMergesChangesFromParent
或一般情况下合并上下文与获取。
fetch
将始终访问持久存储,无论上下文是否已与另一个上下文合并。这就是 Core Data 中获取的工作方式。本书中有一个关于“避免获取请求”的部分(https://www.objc.io/books/core-data/)解释了同样的事情。我解释一下:
“The biggest performance offenders are fetch requests. Fetch requests have to traverse the entire Core Data stack. By API contract, a fetch request — even though it originates at the managed object context — will consult the SQLite store in the file system.
Because of this, fetch requests are inherently expensive.”
Excerpt From: Florian Kugler. “Core Data.”
第 25 页的另一个内容,获取请求:
“One important thing we want to point out now is this: every time you execute a fetch request, Core Data goes through the complete Core Data stack, all the way to the file system. By contract, a fetch request is a round trip: from the context, through the persistent store coordinator and the persistent store, down to SQLite, and then all the way back.”
Excerpt From: Florian Kugler. “Core Data.”
这就是为什么即使您关闭了automaticallyMergesChangesFromParent
,提取操作仍会从数据库中读取最新值。
2015 年和 2016 年 WWDC 关于 Core Data 的 session 非常好(嗯,它们都是),我建议您仔细阅读它们。在过去五年左右的时间里,几乎没有六场 session 。我从观看这些 session 中学到了很多东西,因为它们讨论了最佳实践以及多年来添加到核心数据的增量更改。
如果您出于某种原因希望继续查看数据的旧快照(也许您的后台上下文不断添加/删除条目,而您尚未准备好刷新 View 上下文),那么我建议您查看进入查询生成。它应该给你你想要实现的目标。
关于swift - 合并不同上下文的数据,自动MergesChangesFromParent用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57904537/
我有几个长度不等的 vector ,我想对其进行cbind。我将 vector 放入列表中,并尝试结合使用do.call(cbind, ...): nm <- list(1:8, 3:8, 1:5)
合并(合并)两个 JSONObjects 的最佳方式是什么? JSONObject o1 = { "one": "1", "two": "2", "three": "3" }
我在一个表中有许多空间实体,其中有一个名为 Boundaries 的 geometry 字段。我想生成一个具有简化形状/几何图形的 GeoJson 文件。 这是我的第一次尝试: var entitie
谁能说出为什么这个选择返回 3.0 而不是 3.5: SELECT coalesce(1.0*(7/2),0) as foo 这个返回 3: SELECT coalesce(7/2,0) as foo
首先抱歉,也许这个问题已经提出,但我找不到任何可以帮助我的东西,可能是因为我对 XSLT 缺乏了解。 我有以下 XML: 0 OK
有时用户会使用 Windows 资源管理器复制文件并在他们应该执行 svn 存储库级别的复制或合并时提交它们。因此,SVN 没有正确跟踪这些变化。一旦我发现这一点,损坏显然已经完成,并且可能已经对相关
我想组合/堆叠 2 个不同列的值并获得唯一值。 如果范围相邻,则可以正常工作。例如: =UNIQUE(FILTERXML(""&SUBSTITUTE(TEXTJOIN(",",TRUE,TRANSPO
使用iTextSharp,如何将多个PDF合并为一个PDF,而又不丢失每个PDF中的“表单字段”及其属性? (我希望有一个使用来自数据库的流的示例,但文件系统也可以) 我发现this code可以正常
是否有一个合并函数可以优先考虑公共(public)变量中的非缺失值? 考虑以下示例。 首先,我们生成两个 data.frames,它们具有相同的 ID,但在特定变量上有互补的缺失值: set.seed
我们正在尝试实现 ALM Rangers 在最新的 Visual Studio TFS Branching and Merging Guide 中描述的“基本双分支计划”。 .从指导: The bas
我在不同目录(3个不同名称)中有很多(3个只是一个例子)文本文件,如下所示: 目录:A,文件名:run.txt 格式:txt制表符分隔 ; file one 10 0.2 0.5 0.
我有一张包含学生等级关系的表: Student Grade StartDate EndDate 1 1 09/01/2009 NULL 2
我在学习 https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-associatio
我觉得我有世界上最简单的 SVN 用例: 我有一个文件,Test.java在 trunk SVN的。 我分行trunk至 dev-branch . 我搬家Test.java进入 com/mycompa
我有两个数据框,其中一些列名称相同,而另一些列名称不同。数据框看起来像这样: df1 ID hello world hockey soccer 1 1 NA NA
Elasticsearch 中是否缺少以扁平化形式(多个子/子aggs)返回结果的方法? 例如,当前我正在尝试获取所有产品类型及其状态(在线/离线)。 这就是我最终得到的: aggs [ { key:
如何合并如下所示的 map : Map1 = Map(1 -> Class1(1), 2 -> Class1(2)) Map2 = Map(2 -> Class2(1), 3 -> Class2(2)
我试图通过从netezza服务器导入数据来合并两个数据集。 以下是数据集,其数字为,ID为,字母为,名称为: 下表都是使用命令从netezza导入的: sqoop import --connect n
我有两个数组 $array1 = array('first', 'second', 'third', 'fourth'); $array2 = array('first', 'third', 'fou
我正在 SQL Server 中运行合并。在我的更新中,我只想在值发生更改时更新该行。有一个版本行在每次更新时都会递增。下面是一个例子: MERGE Employee as tgt USING (SE
我是一名优秀的程序员,十分优秀!