读取 CoreData 时出现罕见错误:CoreData 结果中的 data:<fault>

Posted

技术标签:

【中文标题】读取 CoreData 时出现罕见错误:CoreData 结果中的 data:<fault>【英文标题】:Rare Error while reading CoreData: data:<fault> in the CoreData Result 【发布时间】:2016-02-19 15:47:32 【问题描述】:

在我的项目中有时会出现很少的错误(例如每 100 个请求)。我的一些CoreData 的请求有data:&lt;fault&gt;,我不能使用那个数据。我真的不明白为什么会发生这种情况以及如何防止这种行为。

错误的数据输出示例:

<NSManagedObject: 0x147ea09b0> (entity: ToDo; id: 0xd000000002f40000 <x-coredata://7B4FEA6E-1B36-467E-BE14-53CC2EE8CE21/ToDo/p190> ; data: <fault>)

正常输出是这样的:

<NSManagedObject: 0x147ea0790> (entity: ToDo; id: 0xd000000002f40000 <x-coredata://7B4FEA6E-1B36-467E-BE14-53CC2EE8CE21/ToDo/p189> ; data: 
    created = "2016-02-19 15:04:42 +0000";
    text = "Some Text";
)

我通过以下方式获取数据:

 let fetchRequest = NSFetchRequest(entityName: "Example")

 var examples:[NSManagedObject]

 do 
            let results =
            try self.managedContext.executeFetchRequest(fetchRequest)
            examples = results as! [NSManagedObject]
  catch let error as NSError 
            print("Could not fetch \(error), \(error.userInfo)")
 

问题出在结果中的示例中。代码不会在 catch 语句中跳转。这些示例具有与预期数据相同的长度。在我的下一个请求中,所有数据仍然存在。什么都没有丢失。唯一的问题是这个唯一请求的数据是空的。

我的问题在于 Swift。但我猜 Objective C 可能有同样的问题。

任何帮助。提前谢谢你!

【问题讨论】:

故障 (developer.apple.com/library/ios/documentation/Cocoa/Conceptual/…) 是使用 Core Data 托管对象的预期部分。当访问持久属性时,故障将触发并加载其数据。你在做什么让这成为你的问题? 我在所有其他请求中都做同样的事情。我加载了一些数据。就像我说的,它适用于 99% 的情况。我不知道这1%有什么不同。如果我一遍又一遍地做同样的事情很多次,我只能重新创建这个错误。没有什么变化。我知道我可以通过简单检查结果来解决这个问题,但我想了解问题以完全防止它出现 如上所述,那是没有错误。一旦您访问对象的任何属性,如果需要,该对象将从持久存储完全初始化。有关类似问题,请参阅 ***.com/questions/12399910/…。 但是什么是“错误”?这在我看来是预期的行为。 @MartinR 是的,这也是我发现的。但问题是对象不会完全初始化。它是空的。 【参考方案1】:

你可以使用

fetchRequest.returnsObjectsAsFaults = false

当你访问你的对象时使用

print(yourObject.valueForKey("yourKey")

【讨论】:

【参考方案2】:

如果有人在读这篇文章,我解决了我的问题,或者我知道我做错了什么。

问题是我在很短的时间内调用了许多 coredata 请求。似乎有一个限度。我只是设置了最大并行请求数,问题再也没有出现过。

【讨论】:

以上是关于读取 CoreData 时出现罕见错误:CoreData 结果中的 data:<fault>的主要内容,如果未能解决你的问题,请参考以下文章

从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误

使用 CoreData 时出现 NSFetchedResultsController 致命错误(尝试获取)

使用 NSPredicate 从 NSFetchedResultscontroller 更新 NSManagedObject 时出现 CoreData 错误

集成 RestKit 和 MagicalRecord 时出现 CoreData 轻量级迁移错误

对 CoreData 执行添加/更新时出现问题

在vs2010编译qt程序时就会出现错误无法打开文件"Qt5Cored.lib"