带有 NSNumber 的 NSArray 的 NSPredicate(核心数据)

Posted

技术标签:

【中文标题】带有 NSNumber 的 NSArray 的 NSPredicate(核心数据)【英文标题】:NSPredicate with a NSArray of NSNumbers (Core Data) 【发布时间】:2013-03-06 18:08:44 【问题描述】:

我有一个属性为ID 的核心数据实体字段。我想在所有字段实体中搜索 ID == 1、2 或 3。

如何在不创建长附加字符串的情况下将数组添加到 NSPredicate:

NSArray *IDArray = @[@1, @2, @3];

NSMutableString *predicateString = [NSMutableString string];

for (NSNumber *ID in IDArray) 
    [predicateString appendString:[NSString stringWithFormat:@"ID == %@, ID]];

【问题讨论】:

就像注释一样——正常的 Objective-C 约定会有实例和局部变量以小写字母开头。这让其他人更容易阅读您的代码 sn-ps。 xCode 将假定 id 是一个类类型。我一直认为缩写应该大写?我想 IDArray 对我来说很有意义。我是否应该重命名以使名称不以大写缩写开头,例如arrayOfIDs 我相信这是个人品味的问题。我承认输入为identidentifier,让编译器高兴。 【参考方案1】:

这应该可行:

NSArray *IDArray = @[@1, @2, @3];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ID IN %@", IDArray];

备注:你不应该使用字符串格式化函数来组合谓词。使用

 [NSCompoundPredicate orPredicateWithSubpredicates:...]

和类似的方法。原因是字符串和谓词对格式说明符的扩展规则不同。

【讨论】:

好的,我看到它与字符串一起使用,我不确定它是否也适用于 NSNumbers,谢谢! @Log139:即使属性具有 Integer 类型,它也可以工作,并且数组包含字符串:类型会根据需要进行转换。 - 如果有帮助,请考虑“接受”答案,谢谢。 我第一次尝试接受,告诉我等待 30 秒,所以又开始编码,忘记回来接受 =D

以上是关于带有 NSNumber 的 NSArray 的 NSPredicate(核心数据)的主要内容,如果未能解决你的问题,请参考以下文章

对包含 NSNumber 变量的 NSobjects 的 NSArray 进行排序

如何将 NSNumber 转换为 NSString

转换对象以写入firebase? (只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象)

InvalidFirebaseData Swift 3 只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象。

Swift 无法将 NSNumber 桥接到 Float [重复]

ios开发之--NSNumber的使用