提问人:Truly Elite 提问时间:5/6/2023 更新时间:5/6/2023 访问量:67
找出导致Core Data故障的原因
Figuring out what causing a Core Data fault
问:
在更新和删除对象时,我不断遇到Core Data错误,Id希望了解原因。该逻辑实质上是获取实体,更新一些字段并保存。不会出现任何故障。然后,这些实体将用于某些业务逻辑,完成后,将使用以下代码逐个删除实体: [context deleteObject:[context objectWithID:entity.objectID]]; 在上下文块中执行。为什么代码行会触发故障?
我最终确实将其移动到使用 NSBatchDeleteRequest,其中我向它传递了一个对象 ID 数组,这消除了错误,但只是想了解为什么首先触发了错误。
答:
故障是 Core Data 的正常部分。
当您使用 of 执行 fetch 请求(这是默认值)时,对象将作为错误返回,除非您通过设置为 'false.resultType
managedObjectResultType
returnObjectsAsFaults
对象属性保存在行缓存中,错误在结果集中返回。访问属性时,将触发错误,并从行缓存中提取数据。此过程是透明的,并且开销相对较低。
如果您知道要访问对象属性,并且您有一个较大的结果集,则可以设置 to 以避免错误过程。returnsObjectsAsFaults
false
为什么需要按 ID 查找对象?来自不同的上下文 ?如果是这样,将返回一个错误,所以这可能是你问题的答案。这个错误可能没什么大不了的,因为数据已经在内存中(在其他上下文中),数据将位于行缓存中,因此不需要从存储中获取错误。entity
context
-objectWithID:
entity
如果只有一个上下文,则应返回与 完全相同的对象,您说该对象最初不是错误,因此错误的原因必须在其他地方。(另外,您可以直接传递给 。-objectWithID:
entity
entity
-deleteObject:
评论