NSPredicate 检查对象类的种类

Posted

技术标签:

【中文标题】NSPredicate 检查对象类的种类【英文标题】:NSPredicate check for kind of object class 【发布时间】:2011-11-09 13:41:51 【问题描述】:

我有一个 UIView 对象数组。我想在这个数组上调用- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate 来获取MyCustomView 对象的数组。

如何用“isKindOf:”编写谓词?

【问题讨论】:

【参考方案1】:

尝试(已弃用

[NSPredicate predicateWithFormat: @"className == %@", [someObject className]]

或者

[NSPredicate predicateWithFormat: @"class == %@", [someObject class]]

【讨论】:

我也可以和className一起使用。虽然class 看起来更干净。 哪个更合适? “=”还是“喜欢”? 使用like时,?*可以作为通配符使用。 developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/… 这个谓词肯定等同于isMemberOfClass:,而不是原始问题的isKindOfClass: 正如@Tommy 所说,这不是所述问题的正确答案。下面zekel给出了正确答案。【参考方案2】:

我在使用 Jef 的方法时遇到了错误。不过,这对我有用。

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                                              @"self isKindOfClass: %@", class];

来源:https://***.com/a/2556306/168594

【讨论】:

【参考方案3】:

对于任何感兴趣的人,这里是 Jef 方法的 Swift 版本:

NSPredicate(format: "className = %@", String(describing: MyCustomView.self))

【讨论】:

【参考方案4】:

使用-className 作为您的密钥怎么样?

NSPredicate* foo = [NSPredicate predicateWithFormat: @"className == %@", @"MyCustomView"];

【讨论】:

以上是关于NSPredicate 检查对象类的种类的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 使用 CloudKit 进行不区分大小写的字符串搜索

NSPredicate 使用 OR 错误

CoreData:NSPredicate 按日期过滤

NSPredicate:与日期iOS的to-Many关系

过滤巨大的 NSArray

NSPredicate检查对象的属性是否退出,如果是,则获取它