Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何*跟踪*CoreData中的对象计数_Ios_Objective C_Core Data_Magicalrecord - Fatal编程技术网

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,执行此方法时会遇到什么问题?“保持跟踪”意味着在对象计数随时间变化时连续接收更新。您建议的是一个单一的获取请求。好的,当计数发生变化时,您需要一种通知。看起来您已经解决了问题。“保持跟踪”意味着在对象数量随时间变化时不断接收更新。您建议的是单个获取请求。