|
|
1
17
正如您可能知道或注意到的,您必须在主线程上执行UI操作。正如您所提到的,当您保存UI更新时。你可以通过嵌套一个调用来解决这个问题
使用
|
|
|
2
60
对于核心数据,有一条黄金法则——每个线程一个托管对象上下文。托管对象上下文不是线程安全的,因此如果在后台任务中工作,可以使用主线程避免与UI操作的线程冲突,也可以创建一个新上下文来完成工作。如果这项工作需要几秒钟的时间,那么您应该执行后者来阻止您的UI锁定。 要执行此操作,请创建一个新上下文,并为其提供与主上下文相同的持久存储:
执行所需的任何操作,然后在保存新上下文时,需要处理保存通知并将更改合并到主上下文中
处理保存通知和合并很重要,否则主UI/上下文将看不到您所做的更改。通过合并,您的主fetchresultcontroller等将获得更改事件,并按预期更新您的UI。
另一个需要注意的重要事项是,NSManagedObject实例只能在从中获取它们的上下文中使用。如果您的操作需要对某个对象的引用,则必须传递该对象的
|
|
|
3
0
由于核心数据要求每个线程有一个托管对象上下文,可能的解决方案是在全局管理器中跟踪每个线程的上下文,然后跟踪保存通知并传播到所有线程: 假设:
下面是如何获取托管对象(每个线程):
} 在全局管理器的init方法中的某个时刻(我使用了一个singleton):
然后接收保存通知并传播到所有其他托管上下文对象:
(为清楚起见,删除了一些其他方法) |
|
|
Danil · 种子/填充核心数据的最佳实践?[关闭] 1 年前 |
|
|
Vincent · SwiftUI与表单中的CoreData绑定 2 年前 |
|
|
user13990880 · 需要在核心数据中保存打乱的顺序 2 年前 |