Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting CoreData维护关系顺序_Sorting_Core Data - Fatal编程技术网

Sorting CoreData维护关系顺序

Sorting CoreData维护关系顺序,sorting,core-data,Sorting,Core Data,我有一个相当简单的CoreData模型,表示为: 有许多“行程”可以包含多个图像。此外,一个图像可以在多个行程中 我的问题是我想保持它们添加到旅行中的顺序。通常,我会向维护其索引的ImageData对象添加一个字段。然而,因为一个图像可以进行任意次数的旅行,这是没有意义的 在这种情况下,维护索引的干净方法是什么?您可以在Xcode 4中查找ordered relationship复选框 维护关系的顺序有一个性能代价,所以如果你的数据集很大(>10K对象),你可能需要考虑传统的排序属性+排序描

我有一个相当简单的CoreData模型,表示为:

有许多“行程”可以包含多个图像。此外,一个图像可以在多个行程中

我的问题是我想保持它们添加到旅行中的顺序。通常,我会向维护其
索引的
ImageData
对象添加一个字段。然而,因为一个图像可以进行任意次数的旅行,这是没有意义的


在这种情况下,维护索引的干净方法是什么?

您可以在Xcode 4中查找ordered relationship复选框

维护关系的顺序有一个性能代价,所以如果你的数据集很大(>10K对象),你可能需要考虑传统的排序属性+排序描述符方法。


对于您的特定情况,您可能最终会得到一个中间连接实体,它是Image和Trip之间的连接,即ImageTripOrder,它与Trip以及与Image的连接是一对一的。

旧的处理方法是提供一个对订单进行编码的链接实体

Trip{
  //...various attributes
  images<-->>TripToImage.trip
}

Image{
  //...various attributes
  trips<-->>TripToImage.image
}

TripToImage{
  trip<<-->Trip.images
  image<<-->Image.trips
  previous<-->TripToImage.next
  next<-->TripToImage.previous
}
现在,一切都安排妥当了。为了获得特定行程的所有站点,您可以在行程中提取和在到达时间中排序,您可以对任何特定的
trip
对象站点进行排序,或者如果没有日期,您可以遍历关系


在任何情况下,您的模型现在都更接近于您的应用程序所处理的真实世界对象、事件或条件。

我认为这是Xcode 4.1?它没有在4.02版本的iOS sdk中出现。我确实在4.1版本中看到了它。这是否需要模型迁移,或者我是否可以选中该复选框并使用旧数据?数据集不应该太大,但对“Ordered”选项一无所知,也无法在web上找到任何信息。我不确定它在哪个版本的Xcode中,似乎是4.1或更高版本@马克·鲍威尔,你可以勾选这个框。我相信核心数据将对现有数据进行轻量级(推断)迁移,以将其转换为有序的关系。虽然时间旅行社会很棒,但它有点平凡。它拍摄你想看的地方的图像,并将它们放入旅行列表中。也就是说,不是您亲自拍摄的图像。如果使用这种方法,应如何管理头部和尾部?只需使用一个NSPredicate,它检查“next=nil”作为尾部,检查“previous=nil”作为头部?您可能不必使用谓词,因为您将从一个
图像
对象或一个
Trip
对象开始,然后自动拥有一组关联的
TripToImage
对象。我通常在排序对象中有一个方法,告诉他们只需从一个随机排序对象开始沿着上一条/下一条路径走,就可以找到头部或尾部。这适用于几十个对象。不要害怕添加中间对象来模拟复杂的关系。有时,真实世界对象之间的关系比对象本身更复杂,关系需要一个或多个实体来捕捉真实世界的复杂性。
ItineraryStop{
    name:string
    arrivalTime:date
    departureTime:date
    location<<-->Location.stops
    image<<-->Image.stop
    trip<<-->Trip.stop
    previousStop<-->IteneraryStop.nextStop
    nextStop<-->InteneraryStop.previousStop
}