gpt4 book ai didi

iphone - iPhone 上的 CoreData 是否支持 IN 谓词?

转载 作者:IT王子 更新时间:2023-10-29 06:27:23 26 4
gpt4 key购买 nike

我正在尝试根据用户定义的类型列表获取一堆特定类型的记录......

[fetchRequest setEntity:[NSEntityDescription entityForName:@"myRecord" inManagedObjectContext:self.managedObjectContext]];  
NSSet *shipTypes = [NSSet setWithObjects:[NSNumber numberWithInt:70],
[NSNumber numberWithInt:71],
[NSNumber numberWithInt:72],
[NSNumber numberWithInt:73],
[NSNumber numberWithInt:74],
nil];
NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"type in %@", shipTypes];
[fetchRequest setPredicate:aPredicate];
theRecords = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

…运行时,executeFetchRequest 消息抛出异常…

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (type IN {71, 73, 70, 72, 74})'

是我做错了什么,还是真的不支持?

最佳答案

我相信 Alex 是正确的,您必须使用 NSArray,尽管显然如果在这里接受 NSSet 会更好,因为顺序并不是那么重要(尽管它可能会影响 SQL 的运行速度)。

附带说明一下,我从不在任何代码中使用 +predicateWithFormat: 调用,因为它无法进行编译时完整性或类型检查。我强烈建议使用单独的类(class)。

在这种情况下,我会这样做:

fetchRequest.entity = [NSEntityDescription entityForName:@"myRecord" inManagedObjectContext:self.managedObjectContext]];

NSArray *shipTypes = [NSArray arrayWithObjects:[NSNumber numberWithInt:70],
[NSNumber numberWithInt:71],
[NSNumber numberWithInt:72],
[NSNumber numberWithInt:73],
[NSNumber numberWithInt:74],
nil];
fetchRequest.predicate = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"type"] rightExpression:[NSExpression expressionForConstantValue:shipTypes] modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType options:0];

theRecords = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

并不是说这会在编译时捕捉到这个特定的错误,但它可能会在 NSExpression 级别捕捉到它,从而更清楚哪里出了问题。

关于iphone - iPhone 上的 CoreData 是否支持 IN 谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1436032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com