Ios 如何*跟踪*CoreData中的对象计数
我希望跟踪特定托管对象的数量。与Ios 如何*跟踪*CoreData中的对象计数,ios,objective-c,core-data,magicalrecord,Ios,Objective C,Core Data,Magicalrecord,我希望跟踪特定托管对象的数量。与NSFetchedResultsController的方法相同,只是我不需要返回任何数据,只需要一个数字。最有效的方法是什么 作为补充说明,显然我不想以最直接的方式使用NSFetchedResultsController,因为它会无缘无故地产生大量故障和阻塞内存 我试图通过结合NSCountResultType和NSFetchedResultsController来实现这一点,但在合并上下文时,我遇到了一些奇怪的崩溃: NSError *error; auto d
NSFetchedResultsController
的方法相同,只是我不需要返回任何数据,只需要一个数字。最有效的方法是什么
作为补充说明,显然我不想以最直接的方式使用NSFetchedResultsController
,因为它会无缘无故地产生大量故障和阻塞内存
我试图通过结合NSCountResultType
和NSFetchedResultsController
来实现这一点,但在合并上下文时,我遇到了一些奇怪的崩溃:
NSError *error;
auto defaultContext = [NSManagedObjectContext MR_defaultContext];
auto fetchRequest = [NotificationModel MR_requestAllWhere:NotificationModelAttributes.isRead isEqualTo:@NO];
fetchRequest.includesSubentities = NO;
fetchRequest.includesPropertyValues = NO;
fetchRequest.resultType = NSCountResultType;
fetchRequest.sortDescriptors = @[];
fetchRequest.propertiesToFetch = @[];
self.notificationCountFetchController = [NotificationModel MR_fetchController:fetchRequest delegate:self useFileCache:NO groupedBy:nil inContext:defaultContext];
[self.notificationCountFetchController performFetch:&error];
[MagicalRecord handleErrors:error];
应该满足你的需要
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSError *error = nil;
NSUInteger count = [managedObjectContext countForFetchRequest:fetchRequest error:&error];
使用核心数据很容易获得请求的结果数。当您只需要对象计数时,最好不要获取所有托管对象,而只是获取计数。这对于核心数据来说非常简单,您不需要调用executeFetchRequest,而需要在managedObjectContext上调用countForFetchRequest
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSError *error = nil;
return [self.managedObjectContext countForFetchRequest:fetchRequest error:&error];
您也可以在这里检查这个答案,MagicalRecord中的所有更改都通过根上下文进行,因此我注册了
NSManagedObjectContextWillSaveNotification
每次保存时的观察和获取对象计数。简单。谢谢,这是很明显的一个,但它不是跟踪,而是一个简单的获取。NSFetchedResultsController跟踪对象并将更新发送给代理。是的,这是fetch,执行此方法时会遇到什么问题?“保持跟踪”意味着在对象计数随时间变化时连续接收更新。您建议的是一个单一的获取请求。好的,当计数发生变化时,您需要一种通知。看起来您已经解决了问题。“保持跟踪”意味着在对象数量随时间变化时不断接收更新。您建议的是单个获取请求。