2009-11-17 45 views
2

我已經得到了希望的一個簡單問題 - 我有兩個實體 - List和ListItem - 並且它們之間建立了一對多的關係,所有好。iPhone coredata提取請求,圍繞關係和部分的基礎知識

我試圖執行fetchrequest時會出現問題,該fetchrequest將返回由listitem屬性分割的listitems。因爲它是說我


- (NSFetchedResultsController *)getListItems { 
    // Init a fetch request 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"List" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"listItem.productName" ascending:YES selector:nil]; 
    NSArray *descriptors = [NSArray arrayWithObject:sortDescriptor]; 
    [fetchRequest setSortDescriptors:descriptors]; 


    // Init the fetched results controller 
    NSError *error; 
    self.globalFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"listItem.productName" cacheName:@"listItems"]; 
    self.globalFetchedResultsController.delegate = self; 
    if (![[self globalFetchedResultsController] performFetch:&error]) NSLog(@"Error: %@", [error localizedDescription]); 

    [fetchRequest release]; 
    [sortDescriptor release]; 

    return self.globalFetchedResultsController; 
} 

現在,這樣的錯誤:直接上的listItem對象,我不能執行fetchrequest因爲沒有辦法說「凡列表='XXXXX」,所以我不得不像下面這樣不能在排序描述符中使用一對多關係 - 但它也要求我有一個排序描述符,所以我不確定這樣做的正確方法。任何幫助都會很棒。

回答

7

如果你想要獲取和部分ListItems,那麼你應該使用「ListItem」作爲你的實體進行獲取。

在這種情況下,有一種方法可以說「獲取所有ListItem對象,其中List ='xxxxx'」,它被稱爲謂詞(NSPredicate)。

嘗試是這樣的(這裏的 「清單」 是與列出的ListItem關係的名稱):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"list == %@", listObject]; 
[fetchRequest setPredicate:pred]; 

此外,請參閱Predicate Programming Guide

+1

謝謝,我沒有意識到我需要建立從列表項到列表對象的第二個反向關係 - 這樣做可以讓我指定上面的列表。 – tom 2009-11-17 15:51:41

+0

不確定「第二反向關係」是什麼意思,但Apple強烈建議所有關係都是雙向的(並且Xcode會在缺少這些關係時給出編譯器警告)。 – gerry3 2009-11-17 16:14:43