0

這一直使我堅持整天。核心數據關係,NSPredicates和NSFetchedResultsController

我有一個奇怪的錯誤,我認爲我已經縮小到NSPredicate。我有兩個實體:List和Person。列表與被叫Person和Person有多對多的關係,並且Person與List被稱爲列表有多對多的關係。

我傳遞給我一個tableview控制器一個List對象。然後我希望該tableview控制器顯示屬於該列表對象的人員。我正在做一個NSFetchedResultsController。

設置NSFRC時,我有以下代碼(爲了清楚起見,省略了內存管理)。有問題的列表是myList

// Create the request and set it's entity 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

// Create a predicate to get the persons that belong to this list 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList]; 

// Assign this predicate to the fetch request 
[fetchRequest setPredicate:predicate]; 

// Define some descriptors 
NSSortDescriptor *locationDescriptor = [[NSSortDescriptor alloc] initWithKey:@"location" ascending:YES]; 
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:locationDescriptor, lastNameDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

// Create and initialize the fetch results controller. 
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"location" cacheName:nil]; 
self.fetchedResultsController = aFetchedResultsController; 
fetchedResultsController.delegate = self; 

我認爲這個問題是這一行(因爲它消失,如果我將其刪除):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList]; 

當父視圖通過myList到正在發生的事情是桌面控制器,模擬器只是掛起。沒有崩潰日誌在控制檯或任何東西。這幾乎就像是在用AGES整理NSFRC。

這是我使用的謂詞的問題嗎?

回答

0

感謝您的建議重新:使用NSSet。經過數小時的錯誤跟蹤之後,我意識到問題在於表格視圖的cellForIndexPath方法(與NSFRC無關)。

1

你是否需要使用NSFetchedResultsController當你可以從傳入tableViewController的列表中獲得Person

NSSet *people = myList.persons; 
+0

你應該編輯你原來的帖子來問這個問題。 – indragie 2010-07-05 03:21:25

1

你是正確的,你可以只使用myList.persons,一個NSFetchedResultsController沒有必要在這種情況下。

+0

你的評論很混亂。我的答案提供了一個替代方案,需要重新設計tableViewController。 – falconcreek 2010-07-05 03:46:31

+1

對不起,我可能誤會了。但你的回答是正確的。 – indragie 2010-07-05 03:49:42