iOS核心数据NSFetchedResultController.fetchedObject返回故障数据和(0,0)注释

时间:2016-03-25 02:32:44

标签: ios swift core-data mapkit nsfetchedresultscontroller

问题是我尝试从核心数据存储中检索已保存的数据但得到“故障数据”或不确定这是什么,因为我确定我正确保存了数据(有效的位置坐标) 我在视图控制器中的代码:

 override func viewDidLoad() {
        do {
            try fetchedResultsController.performFetch()
        } catch {}
        fetchedResultsController.delegate = self
        //fetch all pins from core data and load
        let pins = fetchedResultsController.fetchedObjects as! [Pin]
        mapView.addAnnotations(pins)
        print(pins.count)  /// 10
        print(pins)
        print(pins[0].coordinate)
        print(pins[1].coordinate)
}

我确信每次都成功保存每个对象。 我打印出一些事实: pins.count有一些数字。然而,这是其他印刷品的奇怪之处 我得到"data: <fault>"并将地点归零。

Pin: 0x7fdc0b40e160> (entity: Pin; id: 0xd000000000080000 <x-coredata://50885CE6-70AB-4AA5-AA84-19D895E4F062/Pin/p2> ; data: <fault>)])
CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0)
CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0)

1 个答案:

答案 0 :(得分:0)

当你得到&lt; fault&gt;时不是错误在核心数据中。它是核心数据数据处理的特征。 Core Data已经采用优化方式,在不牺牲性能的情况下保持较低的内存占用。错误技术有助于实现这一目标。它只在需要时将数据加载到内存中。由于以下原因之一,您收到错误:

1)您可能在保存数据时出错了。

2)管理核心数据的关系属性(可选和必需)时的逻辑错误。

3)核心数据无法满足故障(即从持久存储加载数据)。 (这可能是由于数字(2)逻辑错误)。即使核心数据在故障无法实现之后也不会引发异常,因为默认情况下会设法执行此操作。您在无法访问的托管对象的托管对象的所有属性中获得零。

访问http://code.tutsplus.com/tutorials/what-is-a-core-data-fault--cms-25157以获取有关故障的更多信息。你可能会对那里的错误有所了解,也可能知道你为什么会遇到这个错误。