在NSSet中查找不同对象的对象

时间:2013-06-24 11:56:59

标签: objective-c search nsset

我的NSSet包含3种不同类型的对象(FacebookGroupIndividualNSMutableDictionary

FacebookGroupIndividualNSManagedObject

的子类

现在我想尝试找到匹配键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”。'

2 个答案:

答案 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]];
}];
相关问题