- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 NSFetchResultsController
并且我正在尝试让分页工作。我在 NSFetchRequest
上遇到了这两个属性,并突出显示了我有疑问的部分:
获取限制
(docs):
For every object store except the SQL store, a fetch request executed with a fetch limit in effect simply performs an unlimited fetch and throws away the unasked for rows.
returnsObjectsAsFaults
( docs ):
These faults are managed objects, but all of their property data resides in the row cache until the fault is fired. When the fault is fired, Core Data retrieves the data from the row cache.
将这两个属性结合起来是否合适?设置 fetchLimit
并将 returnsObjectsAsFaults
设置为 true?
当设置 fetchLimit
时,CoreData
仍然会查询每一行的所有内容。使用 NSFetchResultController
时,我根据 CoreData
中的对象配置 UITableViewCells
,因此我认为这些对象不应作为错误返回。但是,如果我结合这两个属性,恐怕 CoreData 会根据文档无限制地查询谓词的每一行并查询整个对象(不是故障)。
我怀疑我是否应该同时使用这两个属性。有没有人有将大型数据集与 NSFetchResultController
结合使用并进行分页的经验?我真的不知道如何调试它。
最佳答案
通过使用 NSPredicate 和 fetchLimits 以及 fetchOffsets 就可以做到。
CDAppDelegate * delegate = (CDAppDelegate*)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext * context = [delegate managedObjectContext];
for(int i = 0; i < 34;i++){
CDObject * object = [NSEntityDescription insertNewObjectForEntityForName:@"CDObject"
inManagedObjectContext:context];
[object setValue:i];
}
[delegate saveContext];
NSFetchRequest* request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"CDObject"
inManagedObjectContext:context]];
NSError* error = nil;
NSUInteger count = [context countForFetchRequest:request error:&error];
assert(error == nil);
NSLog(@"Total count: %u", count);
request.fetchOffset = 0;
request.fetchLimit = 30;
NSLog(@"Fetch offset: %u, limit: %u", request.fetchOffset, request.fetchLimit);
NSArray* page1 = [context executeFetchRequest:request error:&error];
assert(error == nil);
NSLog(@"Page 1 count: %u", page1.count);
request.fetchOffset = 30;
request.fetchLimit = 30;
NSLog(@"Fetch offset: %u, limit: %u", request.fetchOffset, request.fetchLimit);
NSArray* page2 = [context executeFetchRequest:request error:&error];
assert(error == nil);
NSLog(@"Page 2 count: %u", page2.count);
[request release];
关于swift - NSFetchResultController,用于分页的 fetchLimit 和 returnsObjectsAsFaults 的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54968986/
我创建了一个核心数据对象如下: @objc(Gates) public class Gates : NSManagedObject { public class func getFetchRe
我不太明白“returnsObjectsAsFaults”的用法。文档说: A Boolean value that indicates whether the objects resulting f
我正在使用 NSFetchResultsController 并且我正在尝试让分页工作。我在 NSFetchRequest 上遇到了这两个属性,并突出显示了我有疑问的部分: 获取限制(docs): F
文档看了好几遍,还是不明白“Fault”是什么意思? 它是一个对象还是一个值? 作为动词,“Fault”会做什么? 非常感谢! 最佳答案 当关系指向的数据尚未加载到内存中时,对象关系是错误的。因此,它
我是一名优秀的程序员,十分优秀!