相关疑难解决方法(0)

从核心数据请求分页结果

我有一个相对简单的核心数据sqlite数据库.我试图从DB一次获得结果.


    NSFetchRequest* request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:[...]];

    [request setPredicate:[NSPredicate predicateWithFormat:@"flaggedTime != nil"]];

    NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"flaggedTime" ascending:NO];
    [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

    [request setFetchLimit:pageSize];
    [request setFetchOffset:((pageIndex - 1) * pageSize)];    

    NSArray* results = [self.context executeFetchRequest:request error:NULL];
Run Code Online (Sandbox Code Playgroud)

pageSize为30,测试数据的pageIndex为1,2,3或4(DB中约有80个项目,因此pageIndex = 4应该不返回任何项目).谓词和排序工作正常,结果成功返回.获取限制也可以正常工作.没有错误返回.

问题:我总是从第一页获得结果,就像没有设置fetchOffset一样.我试图删除谓词和排序但无济于事.我可以使fetchOffset工作的唯一情况是当我使用30以下的值时.当然,这对于分页来说毫无意义...

有人知道为什么吗?我会非常感谢每一个答案.

更新:我说的是iOS.测试4.2和5.0.

更新2:简化问题.


    NSFetchRequest* request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:[...];

    NSError* error = nil;

    NSManagedObjectContext* context = [...];

    NSUInteger count = [context countForFetchRequest:request error:&error];
    assert(error == nil);

    NSLog(@"Total count: %u", count);

    request.fetchOffset = 0;    
    request.fetchLimit = …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c ios

19
推荐指数
2
解决办法
1万
查看次数

标签 统计

core-data ×1

ios ×1

objective-c ×1