2012-03-16 127 views
1

好的,我在覈心數據中有一對多的關係。一頓飯可以由許多不同的食物組成。我的代碼在Fetch Controller中似乎不太適用。我可以自信地說,self.meal是目前正在嘗試取用的餐食。我在整個應用程序中共享上下文。核心數據一對多取數據

我遇到的問題是應用程序顯示的食物,但它似乎不匹配什麼應該是內部的一餐。只要我添加了一種食物,它立即顯示出來,即使它不在膳食內。

任何幫助或建議,我這樣做正確提取。

- (NSFetchedResultsController *)fetchedResultsController 
{  
    self.context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 

    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Food" inManagedObjectContext:self.context]; 

    [fetchRequest setEntity:entity]; 


    NSPredicate *foodPredicate = [NSPredicate predicateWithFormat:@"meals == %@", self.meal]; 
    [fetchRequest setPredicate:foodPredicate]; 

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
    [fetchRequest setFetchBatchSize:20]; 

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.context sectionNameKeyPath:nil cacheName:@"Root"]; 


    self.fetchedResultsController = theFetchedResultsController; 
    _fetchedResultsController.delegate = self; 

    [fetchRequest release]; 
    [theFetchedResultsController release]; 

    return _fetchedResultsController; 
} 
+0

我看了看你的NSFetchedResultsController代碼,找不到任何問題。無論「self.meal」包含什麼,錯誤行爲是否發生?當你看到虛假的數據時,「self.meal」不存在,對吧?或者,您是否可以在之前的代碼實驗遺留下來的持久存儲中存在虛假數據?如果是這樣,手動刪除存儲文件可以幫助。 – FluffulousChimp 2012-03-16 03:01:19

+0

我必須遍歷每行代碼,但我確實相信self.meal永遠不會變爲零 – Vikings 2012-03-16 03:08:34

+1

您可以粘貼更多的代碼嗎?這裏似乎沒有任何問題。 – 2012-03-16 04:17:12

回答

1

如果self.mealsnil那麼NSFetchedResultsController將返回Food S中的不是Meal的一部分,從而佔你發現的行爲。

0

您的謂詞不正確。您不應該將meals(這是Meal對象的NSSet)與單個meal進行比較。您需要查看在Food對象上設置的meals是否包含該餐。

[NSPredicate predicateWithFormat:@"%@ in meals", self.meal] 
+0

我繼續嘗試了這一點,但沒有奏效。感謝您的輸入。 – Vikings 2012-03-16 14:19:33