NSFetchResultsController 委托没有被调用
Posted
技术标签:
【中文标题】NSFetchResultsController 委托没有被调用【英文标题】:NSFetchResultsController delegate not getting called 【发布时间】:2012-10-22 21:57:10 【问题描述】:我有以下代码:
- (NSFetchedResultsController *)fetchedResultsController
// Set up the fetched results controller if needed.
if (fetchedResultsController == nil)
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"DiskStory" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isRemoved == %@", [NSNumber numberWithBool:NO]];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"created" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Set limit
[fetchRequest setFetchBatchSize:25];
// Set batch size
[fetchRequest setFetchLimit:50];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:kSavedStoryCache];
aFetchedResultsController.delegate = self;
fetchedResultsController = aFetchedResultsController;
return fetchedResultsController;
在我的 viewDidLoad 中我有:
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error])
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
我想知道为什么我的:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
代表,不是叫吗?我在里面放了一个断点。有什么想法吗?
【问题讨论】:
你在- (NSFetchedResultsController *)fetchedResultsController
里面放了一个断点吗?你确定你的初始化正在运行吗?
是的,我在里面放了一个断点,它会一直执行直到它返回
你解决了吗?
【参考方案1】:
我之前也遇到过这个问题,第一次调用performFetch
时不会调用,只有当fetchedResultsController
中的数据实际发生变化时才会调用。例如,当您从此获取结果中的上下文中删除对象时,将调用委托。
【讨论】:
无赖...那么我该如何解决这个问题?我用于表视图数据源的数据状态错误。因为我需要在获取完成后调用 reloadData 我通过在初始提取完成后发布通知来解决它。然后在我的UIViewController
中我重新加载了我的组件。
如果你只是把它放在 performFetch 下,那么不能保证此时会完成抓取?
我的意思是在 fetch 返回之后 - 它完成了。是同步方式。【参考方案2】:
我认为你已经使用了 self.在错误的地方。请看下面的代码;我已将 cmets 添加到更改中
- (NSFetchedResultsController *)fetchedResultsController
// Set up the fetched results controller if needed.
if (fetchedResultsController == nil)
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"DiskStory" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isRemoved == %@", [NSNumber numberWithBool:NO]];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"created" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Set limit
[fetchRequest setFetchBatchSize:25];
// Set batch size
[fetchRequest setFetchLimit:50];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:kSavedStoryCache];
aFetchedResultsController.delegate = self;
fetchedResultsController = aFetchedResultsController; // -> Shouldn't be self.fetchedResultsController
return fetchedResultsController; // -> Shouldn't be self.fetchedResultsController
另外,如果你已经合成你的 fetchedResultsController 如下:
fetchedResultsController = _fetchedResultsController
那么在- (NSFetchedResultsController *)fetchedResultsController
方法中你应该把它称为_fetchedResultsController
【讨论】:
我已根据您的修订对其进行了更改,但没有帮助.. 代表仍然没有被调用。我在执行 fetchRequest 后放了一个断点,它不是 nil 我也合成为 fetchedResultsController 获取了 25 条记录.. 没有部分 你确定你已经注册NSUserDefaultsDidChangeNotification
并且正在执行吗?
我为什么要有 NSUserDefaultsDidChangeNotification?以上是关于NSFetchResultsController 委托没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSFetchResultsController 时 UICollectionView 滚动不流畅
NSFetchResultsController,将新数据填充到表格视图中
NSFetchResultsController 委托没有被调用
NSFetchResultsController 委托没有被调用
NSFetchResultsController -controllerDidChangeContent: - 尝试使用 userInfo 为单元格创建两个动画