2017-04-10 63 views
0

我想下面的数据联系在一起:如何从此核心数据函数中检索特定值?

for member in self.markersArray { 
     var coordinate = NSEntityDescription.insertNewObject(forEntityName: "Coordinate", into: managedObjectContext) 
     coordinate.setValue(member.latitude, forKey: "latitude") 
     coordinate.setValue(member.longitude, forKey: "longitude") 
     coordinate.setValue(mapName, forKey: "name") 
    } 

这样,以后我可以参考这个阵列经纬度值由MAPNAME。我怎样才能做到这一点?

回答

1

通过指定提取请求的谓词,可以确保提取请求返回的数组仅包含具有给定mapName的坐标对象,例如。

fetchRequest.predicate = NSPredicate(format:"name == %@", yourMapName) 

但存储在同一个地图的名字多次,一次为每个坐标,是低效的(特别是如果你以后想改变地图的名字 - 你必须更新所有相关的坐标对象)。另一种方法是向坐标实体添加具有一个属性(mapName)和多对多关系(coordinates)的另一个实体(例如Map)。您的坐标实体将不需要0​​属性,但将与Map实体(coordinatesmap关系为相互反转)具有一对一关系(map)。 “连在一起”坐标的对象,你可以创建一个Map对象,设置其属性mapName,然后将其分配给map关系每个坐标对象:

let newMap = NSEntityDescription.insertNewObject(forEntityName: "Map", into: managedObjectContext) 
newMap.setValue(mapName, forKey:"mapName") 
for member in self.markersArray { 
    var coordinate = NSEntityDescription.insertNewObject(forEntityName: "Coordinate", into: managedObjectContext) 
    coordinate.setValue(member.latitude, forKey: "latitude") 
    coordinate.setValue(member.longitude, forKey: "longitude") 
    coordinate.setValue(newMap, forKey: "map") 
} 
+0

太感谢你了!保存了一天。 – konyv12

+0

实际上,我得到以下错误:*由于未捕获的异常'NSInvalidArgumentException',原因:在实体中未找到keypath名称,终止应用程序。我做错了什么?我把你说的完全一样:fetchRequest.predicate = NSPredicate(格式:“name ==%@”,农场) - >农场是地图的名称 – konyv12

+0

如果您正在提取坐标,只需遍历关系即可访问地图名称:NSPredicate(格式:“map.name ==%@”,“farm”)。 – pbasdf