Swift NSFetchResultController,fetchLimit和;用于分页的returnsObjectsAsFaults

Swift NSFetchResultController,fetchLimit和;用于分页的returnsObjectsAsFaults,swift,core-data,Swift,Core Data,我正在使用一个NSFetchResultsController,我正在尝试让分页工作。我在一个NSFetchRequest中遇到了这两个属性,并突出显示了我有疑问的部分: fetchLimit(): 对于除SQL存储之外的每个对象存储,都会执行一个获取请求 在提取限制生效的情况下,只需执行无限制提取和 丢弃未请求的行 returnsObjectsAsFaults(): 这些故障是托管对象,但它们的所有属性数据 驻留在行缓存中,直到触发故障。当故障被排除时 激发,核心数据从行缓存中检索数据 将这两

我正在使用一个
NSFetchResultsController
,我正在尝试让分页工作。我在一个
NSFetchRequest
中遇到了这两个属性,并突出显示了我有疑问的部分:

fetchLimit
():

对于除SQL存储之外的每个对象存储,都会执行一个获取请求 在提取限制生效的情况下,只需执行无限制提取和 丢弃未请求的行

returnsObjectsAsFaults
():

这些故障是托管对象,但它们的所有属性数据 驻留在行缓存中,直到触发故障。当故障被排除时 激发,核心数据从行缓存中检索数据

将这两种属性结合起来是否合适?设置
fetchLimit
并将
returnsObjectsAsFaults
设置为true

当设置
fetchLimit
时,
CoreData
仍会查询每一行的所有内容。使用
NSFetchResultController
时,我正在基于
CoreData
中的对象配置
uitableviewcell
,因此我认为这些对象不应该作为故障返回。但是如果我结合这两个属性,我担心CoreData会无限制地查询每一行谓词,并根据文档查询整个对象(不是错误)


我怀疑我是否应该同时使用这两种属性。是否有人有过将大型数据集与带有分页的
NSFetchResultController
结合使用的经验?我真的不知道如何调试它。

使用NSPredicate、fetchLimits和fetchoffset就可以完成

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];
CDAppDelegate*delegate=(CDAppDelegate*)[[UIApplication sharedApplication]delegate];
NSManagedObjectContext*上下文=[delegate managedObjectContext];
对于(int i=0;i<34;i++){
CDObject*object=[NSEntityDescription insertNewObjectForEntityForName:@“CDObject”
inManagedObjectContext:context];
[对象设置值:i];
}
[委托保存上下文];
NSFetchRequest*request=[[[NSFetchRequest alloc]init]autorelease];
[请求setEntity:[NSEntityDescription entityForName:@“CDObject”
inManagedObjectContext:context]];
n错误*错误=nil;
NSU整数计数=[FetchRequest的上下文计数:请求错误:&错误];
断言(错误==nil);
NSLog(@“总计数:%u”,计数);
request.fetchOffset=0;
request.fetchLimit=30;
NSLog(@“提取偏移量:%u,限制:%u”,request.fetchOffset,request.fetchLimit);
NSArray*page1=[context executeFetchRequest:请求错误:&错误];
断言(错误==nil);
NSLog(@“第1页计数:%u”,第1页计数);
request.fetchOffset=30;
request.fetchLimit=30;
NSLog(@“提取偏移量:%u,限制:%u”,request.fetchOffset,request.fetchLimit);
NSArray*page2=[context executeFetchRequest:请求错误:&错误];
断言(错误==nil);
NSLog(@“第2页计数:%u”,第2页计数);
[请求释放];

1。这并不能回答我的问题。编程语言不同于Swift(见标签)。您找到解决方案了吗?我最终没有使用NSFetchedResultsController。