我正在寻找一个可以检查TypeID
关系中前5个对象的Core Data
的谓词。
这是我正在尝试的方法,但是不起作用:
int num = 5;
NSMutableArray *predicates = [[NSMutableArray alloc] init];
for (int i = 0; i < num; i++) {
[predicates addObject:[NSPredicate predicateWithFormat:@"SELF IN %@ AND logs[%i].TypeID == 3", items, i]];
}
出现错误:
错误:SQLCore dispatchRequest:异常处理请求:
,不支持的功能 表达式logs [0] .TypeID,userInfo为(空)CoreData: 错误:SQLCore dispatchRequest:异常处理请求: ,不支持的功能 表达式日志[0] .UserID为(null)的TypeID
我意识到自己可能做错了,所以可以使用NSPredicate
来做到这一点吗?
答案 0 :(得分:0)
如果只想获取5。将fetchLimit设置为5。以下代码可能无法立即运行,但是原理是相同的。您可以添加属性或get函数来分配“ logs.TypeID”,例如-(Int)myID {return logs [0] .TypeID;},然后使用“ SELF IN%@ AND myID == 3”将解决该问题。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity name" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@ AND logs.TypeID == 3", items];
[fetchRequest setPredicate:predicate];
fetchRequest.fetchLimit = 5;
NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
}
答案 1 :(得分:0)
我不确定我是否理解这些问题,但我认为不可能做到您所要求的,至少不能做到措辞不一。似乎不可能检查关系中的五个对象并停在那里,即使数据库中有更多匹配项,也不会返回任何数目的匹配项,甚至根本不会返回任何匹配项。
但是,我认为这可能是您正在遇到的问题,有可能找到五个既在items
集中又至少有一个{{1 }}和log
。可以完成与E.Coms所建议的类似的操作,只是需要一个子查询来处理这种关系。 (我假设日志是一对多关系,或者一对多或多对多。)
请注意,以下代码尚未经过测试:
typeID == 3