2016-03-03 33 views
0

我有一個與另一個對象類型有多對多關係的CoreData對象的集合。核心數據迫使多數故障全部被觸發?

在這些對象中,我需要搜索相關的對象以找到特定的對象。所以我通過他們循環尋找可以正常工作的比賽。但仔細觀察,我可以看到CoreData在循環中的每個項目時都會關閉每個故障,顯然這並不好 - 單獨發生數百個故障。

我可以觸發CoreData作爲一組激發關係中的所有故障嗎?

  • 我不想只是在首先關係關係,因爲我正在處理大量的對象,對於幾乎所有的對象,我將永遠不需要深入到相關的對象。

回答

1

您可以使用反向關係「手動」獲取相關對象,使用謂詞來限制結果。例如,如果Department有一對多的關係,Employee,你想獲取所有EmployeescurrentDepartment,抓取可能是這樣的:

NSFetchRequest *employeeFetch = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; 
employeeFetch.predicate = [NSPredicate predicateWithFormat:@"department == %@",currentDepartment"]; 

它將取出一氣呵成所需Employee對象(*) 。然後,您可以使用由提取返回的數組或由currentDepartment.employees關係給出的集合來搜索。根據您正在執行的搜索的複雜性,您甚至可以將其表示爲謂詞中的另一個子句,並避免需要循環。 (*)從技術上講,由提取返回的對象仍然是錯誤的(除非您將returnsObjectsAsFaults設置爲false),但是這些錯誤的數據已從存儲中提取到緩存中,因此現在觸發該錯誤有最小的開銷。