我有一個關於NSFetchedResultController更新問題的問題。您可能已經知道,如果我獲取所有項目並設置NSFetchedResultController的委託,那麼如果數據已更改,控制器將捕獲更改並自動更新其對象。核心數據 - 如果我給NSPredicate和委託NSFetchedResultController會自動跟蹤更改
但是,如果我使用NSPredicate獲取項目,它不會捕獲任何更改或其對象。有人能告訴我爲什麼嗎?
以下是帶有NSPredicate集的代碼。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.globalContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:200];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Department" ascending:YES selector:nil];
NSArray *descriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:descriptors];
[sortDescriptor release];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"Department IN %@",departmentArray];
[fetchRequest setPredicate:pred];
self.resultsController = [[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.globalContext sectionNameKeyPath:@"Department" cacheName:@"Root"] autorelease];
self.resultsController.delegate = self;
[self.resultsController performFetch:nil];
[fetchRequest release];
在代碼中,我設置了@「部門」作爲sectionNameKeyPath,而我只需要從一些部門(departmentArray)的「人」項目,並非所有部門。
如果我從NSFetchRequest中刪除了NSPredicate,那麼每次插入甚至是一個新部門的人員項目時,resultsController都會知道並觸發該委託。
但是,如果我保留NSPredicate,resultsController將無法知道任何更改。例如:
我的部門數組具有以下名稱:@「Sales」,@「Human Resources」。
最初,核心數據中沒有來自@「Sales」的人員。我做了一個訪問,然後只有來自@「人力資源」的人獲得了。
然後插入一個來自@「Sales」的人,我認爲resultsController應該會自動更新,對不對?因爲@「Sales」的新人適合NSPredicate,對嗎?
感謝
順便說一句,我刪除所有緩存之前,我提取 – Jack 2011-04-19 09:55:54