如何*跟踪CoreData中的对象计数*

时间:2015-09-16 10:27:29

标签: ios objective-c core-data magicalrecord

我想跟踪特定托管对象的数量。 NSFetchedResultsController的方式与我不需要任何数据的方式相同,我只需要一个数字。什么是最有效的方法?

作为旁注,显然我不想以最简单的方式使用NSFetchedResultsController因为它会产生一堆错误并且无缘无故地阻塞内存。

我试图通过结合NSCountResultTypeNSFetchedResultsController来实现这一点,但在合并上下文时我遇到了一些奇怪的崩溃:

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];

3 个答案:

答案 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

查看此答案