您如何在核心数据中建模位置?

时间:2010-09-06 21:27:18

标签: iphone objective-c core-data

我想创建一个具有属性的位置实体:latitude&经度。然后,我想设置一个从用户到位置,从照片到位置等的关系。我应该这样做而不创建从位置到其他人的反向关系吗?否则,我该怎么做呢?

谢谢!

马特

5 个答案:

答案 0 :(得分:1)

在大多数情况下,您希望创建反向关系。

反向关系使得维护图形完整性变得更容易,更重要的是,反向关系反映了模型模拟的对象,事件或条件之间的真实世界关系。对象图的要点不仅仅是数据位的哑存储,还包括该数据不同部分之间关系的主动建模。在核心数据中,关系本身就是活动数据。

在现实世界中,照片是在某些位置拍摄的,而在某些位置则拍摄照片。反向关系可以模拟该现实,并为您提供根据其位置搜索照片的选项。

答案 1 :(得分:0)

这是一个上下文敏感的问题,因为如果没有整个数据模型,可能无法提出最佳设计。

但是 - 纬度和经度自然地被建模为双打。它们应该不是可选的,因为名为“location”的实体没有两者都没有意义。您可能还应该以米为单位模拟不确定性的圆圈,您现在可能不会使用它,但它可能非常有用,并且它将花费您很少。

我认为你想要有一个反比关系,因为从位置开始并找到在该位置的某个距离内拍摄的照片可能是有用的。我不认为你想要使照片和位置成为很多:许多关系,因为通过尝试重用位置来保存数据是错误的经济,它会使你的代码更加复杂并节省很少的字节。照片:位置更自然地是1:1,但您可以通过添加(NSArray*)locationsWithinMeters:(float)meters ofLocation:(Location*)thisLocation这样的方法将所有位置“足够接近”返回到某个位置 - 非常适合查找某个地方的所有照片。

答案 2 :(得分:0)

Apple制作了一个CLLocation类。它主要用于从GPS返回数据,但可以单独创建。 http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocation_Class/CLLocation/CLLocation.html

答案 3 :(得分:0)

我认为使用核心数据来管理照片以及拍摄照片的地点就可以了。但不知何故使用CD管理“位置”有点奇怪。我认为你正在努力解决这个问题的原因是因为“位置”并不真正适合这种数据模型。正如亚当所建议的那样,我只会将拍摄的照片和照片扫描到一定距离内。对于instnace,所有相距不到1公里的照片都会形成一个位置。你可能会有一些重叠...

您应该查看ADC示例代码PhotoLocations

答案 4 :(得分:0)

好的,我现在知道怎么做了。我可以创建一个名为abstract NSManagedObject的{​​{1}}。然后,我可以将LocatableObject作为其他Parent的{​​{1}},例如NSManagedObjectUser。然后,我可以在Photo上建立一个指向object的关系LocationLocatableObject上的反转为LocatableObject,并指向location }。现在,LocationUser每个都有Photolocation。但是现在,我不会存储照片的位置,所以我只使用LocatableObjectLocationUserlocation有{Location 1}}。