我目前正在嘗試使用NSFetchedResultsController從核心數據填充我的項目中的UITableView。我使用的是自定義搜索與比較器(雖然我也嘗試了選擇,並有一個相同的問題):NSFetchedResultsController自定義排序沒有被調用
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
/*
Set up the fetched results controller.
*/
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"objectName" ascending:YES comparator:^(id s1, id s2) {
NSLog(@"Comparator");
//custom compare here with print statement
}];
NSLog(@"Sort Descriptor Set");
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"firstLetterOfObject" cacheName:@"Objects"];
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
if (![fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return fetchedResultsController;
當我進入這個標籤,我已登錄遍佈程序,發現NSFetchedResultsController做在讀取時甚至不會輸入比較器塊。而是用一些默認排序方法對其進行排序。
但是,如果我使用objectName刪除並添加一個對象,它就會進入比較器塊並正確排序表。
爲什麼NSFetchedResultsController不會使用比較器進行排序,直到託管對象模型更改爲止?
注意:我試過關閉緩存,和/或在viewDidLoad中執行一次提取操作,但似乎我提取多少次並不重要,但是何時。出於某種原因,它只在對象模型更改後使用我的排序。
他們不是瞬態屬性,但你的其他建議絕對看起來可能是問題。唯一的問題是我依靠fetchedResults控制器向表視圖提供段名稱等,所以每次在內存中排序都很困難(我認爲)。你會如何推薦去做?而我的另一個問題就是爲什麼比較器塊在對象模型更改後工作?謝謝! – 2011-01-25 16:32:40