我有一個多一對多下列實體之間關係的模型:NSFetchedResultsController - 委託方法何時被觸發?
會議> --- <人
我使用的是NSFetchedResultsController
返回所有的人的會議(以下顯示在自定義視圖中)。該NSFetchRequest
創建這樣:
NSSortDescriptor * lastNameSort = [NSSortDescriptor sortDescriptorWithKey: @"lastName" ascending: YES];
NSSortDescriptor * firstNameSort = [NSSortDescriptor sortDescriptorWithKey: @"firstName" ascending: YES];
request.entity = [NSEntityDescription entityForName: @"Person" inManagedObjectContext: context];
request.predicate = [NSPredicate predicateWithFormat: @"(ANY %K == %@)", @"meetings", self];
request.sortDescriptors = [NSArray arrayWithObjects: lastNameSort, firstNameSort, nil];
調用-[Meeting addPeopleObject:]
對於一個人正常工作 - 爲NSFetchedResultsController
委託方法正確解僱,我可以更新自定義視圖。
我在將多個人添加到會議時遇到問題。一個方法遍歷一系列的人,爲每個人調用-[Meeting addPeopleObject:]
。我這樣做的第一次,NSFetchedResultsControllerDelegate
方法被添加每個人後被解僱。所以如果我加5人,controllerWillChangeContent:
然後controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
然後controllerDidChangeContent:
被解僱5次。
如果我創建了第二次會議對象,然後在同一5人加入到這次會議上,willChange
和didChange
委託方法,僅啓動兩次,第一次人後一次,最後人後一次。如預期的那樣調用controller:didChangeObject:...
方法5次,但不按照人們插入的順序。
這是預期的行爲NSFetchedResultsController
?是否有緩存導致這種情況發生(NSFetchedResultsController
是由零緩存創建的)。有沒有辦法強制每次更新後觸發`NSFetchedResultsControllerDelegate'方法?
謝謝 - 這幾乎證實了我的想法 –