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。