2011-04-23 68 views
0

我有一個關鍵字查詢的結果集。返回的每個關鍵字對象與另一個實體都有多對多的關係。 (稱爲B)如何獲取通過關係檢索的NSManagedObject的ObjectID?

我在想什麼是有沒有辦法使用關鍵字resultset,並找到只有B實體的管理對象id,而不必將其拉入內存?目前,我一直這樣做:

NSMutableArray *objIdList = [[NSMutableArray alloc] init]; 
NSArray *keywordResultSet = <results from initial keyword query>; 
for (Keyword *keyword in keywordResultSet) 
{ 
    B *mo = [keyword valueForKey: <relationship>]; 
    [objIdlist addObject: [mo objectID]]; 
} 
// additional sorting of result set 

問題是這是超慢,當我這樣做。有沒有辦法只獲得ObjectIDs?

+0

我應該補充一點,我在這裏問的是對象在關係另一端的objectid而不是「關鍵字」似乎沒有辦法做到這一點。我可以使用被引用的實體的其他字段,但是我要求的是一個通用的級別。我不想知道一個特定的財產存在。使用objectIds應該允許我這樣做,因爲它們對每個對象都是唯一的,並且可以安全地跨線程和上下文使用。 – 2011-04-25 00:00:26

回答

0

要問的第一件事就是你是否需要objectIDs。很多Core Data新手都認爲objectID就像關係數據庫中的鍵。他們不是。當您需要引用另一個持久性存儲中的對象時,您只需要objectID。否則,他們不會對你有所幫助。考慮到您對Core Data的相關經驗不足,我認爲這極不可能,您首先需要獲得objectID。

對於除objectID以外的任何其他屬性,可以執行fetch by屬性並將結果類型設置爲字典,該字典會生成輕量級提取,該提取僅返回包含所尋找的一個屬性值的字典數組。你不能用objectID做到這一點,因爲objectID並不嚴格地說是託管對象的屬性,而是在特定的持久存儲中引用它們。

+0

我對managedobjectids的理解是,它們在商店和上下文中是持久的,並且非常輕便,因爲它們只是該引用。任何時候我需要使用引用對象中的屬性,它都會出錯,但我不需要任何屬性,我不需要對整個月份進行排序。使用objectid是正確的方式就是我所解釋的。蘋果文檔建議使用它們,所以我不確定我們在這方面是否相互理解。 – 2011-04-24 23:57:35