我想跟踪特定托管对象的数量。 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];
答案 0 :(得分:2)
MagicalRecord中的所有更改都通过根上下文,因此我注册了NSManagedObjectContextWillSaveNotification
观察,并在每次保存时获取对象计数。容易。
答案 1 :(得分:0)
- countForFetchRequest:error:
应该满足您的需求
int (*p) [5];
答案 2 :(得分:0)
使用Core Data获取请求的结果数量非常容易。当您只需要对象计数时,最好不要获取所有托管对象,而只是获取计数。使用Core Data非常简单,而不是调用executeFetchRequest,您必须在managedObjectContext上调用countForFetchRequest。
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSError *error = nil;
return [self.managedObjectContext countForFetchRequest:fetchRequest error:&error];
您也可以在此link
查看此答案