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



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

 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)

当您得到<核心数据中的fault>。这是核心数据数据处理的特点。Core Data在其中实现了优化的方式,以在不牺牲性能的情况下保持低内存占用率。出错技术有助于实现这一点。它只在需要时将数据加载到内存中。由于以下原因之一,您出现错误:

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

2) 管理核心数据的关系属性(可选和强制)时出现逻辑错误。

3) 核心数据无法完成故障(即从持久存储加载数据)。(这也可能是由于数字(2)的逻辑错误)。即使核心数据在故障无法实现后不会抛出异常,因为默认情况下它是这样做的。在不可访问的托管对象的托管对象中,所有属性都为零。

访问http://code.tutsplus.com/tutorials/what-is-a-core-data-fault--cms-25157有关故障的更多信息。你们可能会了解那个里的错误,以及为什么会出现那个错误。

最新更新