我的NSSet
包含3种不同类型的对象(FacebookGroup
,Individual
和NSMutableDictionary
)
FacebookGroup
和Individual
是NSManagedObject
现在我想尝试找到匹配键contactInfo
的对象,所以我喜欢这样:
NSMutableDictionary *contactDict = [[self.contacts filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"contactInfo == %@", contactInfo]] anyObject];
if (contactDict) // the object is found
但FacebookGroup
s没有密钥contactInfo
,因此会抛出异常。我希望抛出contactDict
的异常将是nil
。
如何在不抛出异常的情况下搜索NSSet
个不同的对象?
* 由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[valueForUndefinedKey:]:实体FacebookGroup不是密钥值编码兼容的密钥“contactInfo”。'
答案 0 :(得分:0)
如果使用+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block
创建谓词,则可以在块中执行检查以确保evaluatedObject
具有密钥,然后执行相应的检查。
答案 1 :(得分:0)
您要搜索的对象是 NSMutableDictionary ,这是从其他对象识别它的方式,发送 isKindOfClass 消息。因此,您应该创建一个评估每个对象的谓词:
NSPredicate* predicate= [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return [evaluatedObject isKindOfClass: [NSMutableDictionary class]];
}];