带有 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
?
我相信这是个人品味的问题。我承认输入为ident
或identifier
,让编译器高兴。
【参考方案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 进行排序
转换对象以写入firebase? (只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象)
InvalidFirebaseData Swift 3 只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象。