Core data 预测最后20条记录

Core data 预测最后20条记录,core-data,nspredicate,nsfetchrequest,Core Data,Nspredicate,Nsfetchrequest,我正在处理核心数据,我尝试使用setFecthLimit获取最后20条记录,但在这些最后的记录中,我想获取未读的数量,我使用了这个 NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:_managedObjectContext]; [reques

我正在处理核心数据,我尝试使用
setFecthLimit
获取最后20条记录,但在这些最后的记录中,我想获取未读的数量,我使用了这个

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];
[request setFetchLimit:20];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isRead = NO OR isRead = NIL"];
[request setPredicate:predicate];                    

NSError *error = nil;
NSMutableArray *records = [[_managedObjectContext
                                            executeFetchRequest:request
                                            error:&error] mutableCopy];

但是它总是返回20,有人能帮我吗?

一个简单的解决方案是删除谓词。抓取20个对象,然后根据谓词过滤它们

例如:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];
[request setFetchLimit:20];                    

NSError *error = nil;
NSArray *records = [_managedObjectContext executeFetchRequest:request
                                                        error:&error];

// do some error checking here...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isRead = NO OR isRead = nil"];
// [NSPredicate predicateWithFormat:@"isRead = %@", [NSNumber numberWithBool:NO]];
NSArray *filteredRecords = [records filteredArrayUsingPredicate:predicate];

我认为您的谓词格式有误:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Post"]
request.fetchLimit = 20;
request.predicate = [NSPredicate predicateWithFormat:@"(isRead == NO) OR (isRead == NULL)"];
NSSortDescriptor = [...insert your sort descriptor code here...]
request.sortDEscriptos = @[sd];

请记住进行排序,这样您就可以得到最后20个,而不仅仅是随机的20个。

请参阅感谢rachel的回复,但这个示例与我的不同。我和同一个实体一起工作。我可以使用setFetchLimit:20得到这个结果,然后使用checking isRead属性过滤结果,但是我想知道我是否可以用更简单的方法来实现这个结果。对不起,flexaddict,我尝试解释一下。我想获取属性为“isRead==NO”的记录,但只获取最后10条记录,例如:1。id 1 isRead=是;-id 2 isRead=否;-id 3 isRead=是;-id 4 isRead=否;-id 5 isRead=否;-id 6 isRead=否;-id 7 isRead=是;-id 8 isRead=是;-id 9 isRead=是;-id 10 isRead=是;-id 11 isRead=是;-id 12 isRead=否;-id 13 isRead=是;-id 14 isRead=否;-id 15 isRead=否;有了这些记录,我只想得到20条最后记录中的未读内容,如:2、4、5、6感谢您删除了您的答案。谢谢flexaddict,这是我使用的方法,但我想知道是否有一种简单的方法可以做到这一点。@doc根据我的经验,没有。也许其他人可以建议其他方法。谢谢你的回复。