如何解决NSPredicate错误'无法使用in / contains运算符与集合8(不是集合)

时间:2013-12-16 08:35:59

标签: ios iphone objective-c nspredicate

我试图根据初始查询的情绪来预测我的coredate所有情绪设置为8。 我将每秒从0到7来调用以更新tableview。

但我得到了

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't use in/contains operator with collection 8 (not a collection)'

我应该使用CONTAINS或其他运算符进行谓词吗?

NSString* filter = @"%K CONTAINS[cd] %@";
NSPredicate *getMoodPred = [NSPredicate predicateWithFormat:filter, @"mood", mood];
NSLog(@"getmood %@",getMoodPred); //getmood mood CONTAINS[cd] "7"
NSArray *getMoodArray = [[VPPCoreData sharedInstance]allObjectsForEntity:@"Song" orderBy:Nil filteredBy:getMoodPred];

1 个答案:

答案 0 :(得分:16)

可能意味着mood属性存储为Number,而不是String。 “CONTAINS”仅适用于字符串。以下谓词应该有效:

NSNumber *mood = @(7);
NSString *filter = @"%K == %@";
NSPredicate *getMoodPred = [NSPredicate predicateWithFormat:filter, @"mood", mood];

使用rhs上的NSNumber==作为比较器。