2017-04-10 101 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