2012-06-20 65 views
0

我無法爲無關實體執行CoreData提取請求。讓我們假設我有一個包含3個實體的對象模型:MessageUserAdvisor針對不相關實體的CoreData提取謂詞

我想讓這3個對象互不相關。因此Message確實具有senderEmailreceiverEmail的屬性,而UserAdvisor的確具有屬性email
但是,這些對象之間沒有進一步的關係。
我現在想要例如由顧問或用戶獲取最新(最新)Message。但是,我應該怎麼做這個獲取謂詞,因爲對象沒有連接?

這是甚至可能在一個提取請求或我需要將每個對象分別獲取到一個數組,然後進一步的操作,以獲得我想要的?

回答

1

亞歷山大,

如果這些機構都沒有關係對方你需要excecute不同擷取要求抓住你的數據。

因此,舉例來說,你可以抓住最新Message建立類似如下的要求:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"senderEmail == %@", grabbedEmail]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"insertionDate" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

NSFetchRequest *messageFetch = [[NSFetchRequest alloc] init]; 
[messageFetch setEntity:[NSEntityDescription entityForName:@"Message" inManagedObjectContext:yourContext]]; 
[messageFetch setPredicate:predicate]; 
[messageFetch setSortDescriptors:sortDescriptors]; 
[messageFetch setFetchLimit:1]; 

要檢索grabbedEmail(如果你沒有的話),你需要設置的請求與一個具體的謂詞。接收方電子郵件也可以應用相同的方法。例如。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"userId == %@", @"someUserId"]; 

NSFetchRequest* userFetch = [[NSFetchRequest alloc] init]; 
[userFetch setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:yourContext]]; 
[userFetch setPredicate:predicate]; 
[userFetch setFetchLimit:1]; 

NSArray* userResults = [userFetch executeFetchRequest:&error]; 

User* retrievedUser = (User*)[userResults objectAtIndex:0]; 
NSString* grabbedEmail = [retrievedUser email]; 

按日期排序,你可以簡單地添加到Message enitity的屬性稱爲insertionDate(的NSDate型),允許您按日期排序。

當執行請求

NSArray* results = [messageFetch executeFetchRequest:&error]; 

陣列results將包含你正在尋找的(僅)Message元件。

爲什麼你需要維護單獨的這些實體?

希望有所幫助。

+0

感謝您的支持!我需要分別維護這些實體,因爲我的模型包含比上述三個實體更多的實體。我不想擁有一個與所有實體之間都有關係的巨大網狀模型。所以我認爲,將一些關係建模爲提取的屬性可能會更好... – Alexander

+0

@Alexander不客氣,如果您發現日期建議有用,也可以upvote。 :-) –