Jos*_*des 2 core-data delegation nsfetchedresultscontroller ios
如果代码将委托分配给NSFetchedResultsController如下:
-(id)initWithFetchedResultsController:(NSFetchedResultsController*)fetchedResultsController
{
self = [super init];
if (self != nil)
{
fetchedResultsController.delegate = self;
_fetchedResultController = fetchedResultsController;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
该NSFetchedResultsControllerDelegate方法– controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:从未被调用过self:
-(void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
NSLog(@"Delegate method called"); // Never called
}
Run Code Online (Sandbox Code Playgroud)
谓词没有问题,谓词被分配,并且使用通知直接起作用.
问题是- (BOOL)performFetch:(NSError **)error永远不会调用initial,因为这个特定的代码只关心结果集的更改,而不是初始集.但是,控制器不会注意到它从未有过的数据变化.更改init方法如下修复了问题:
-(id)initWithFetchedResultsController:(NSFetchedResultsController*)fetchedResultsController
{
self = [super init];
if (self != nil)
{
fetchedResultsController.delegate = self;
_fetchedResultController = fetchedResultsController;
[fetchedResultsController performFetch:nil];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我有一个NSFetchedResultsController,它有一个委托集和performFetch执行.仍然没有调用委托方法.
我的Fetched Results Controller有一个sectionNameKeyPath,它是一个布尔值.我作为一个非原始的访问 - 作为NSNumber.
我插入和更新的所有实体都具有此属性为零.我原以为nil会被解释为NO,但事实并非如此.
当我插入一个具有此属性为nil的实体时,将不会调用获取结果控制器委托方法.它会简单地忽略这个记录,就像它不关心我的FRC一样.
所以,我确信我从来没有把尼尔斯在用作财产sectionNameKeyPath.