2013-06-24 3 views
0

У меня есть NSSet, который содержит 3 различных типов объектов (FacebookGroup, Individual и NSMutableDictionary)Нахождение объекта в NSSet различных объектов

FacebookGroup и Individual являются подклассами NSManagedObject

Теперь я хочу попробовать найти соответствие ключ объект contactInfo поэтому я так:

NSMutableDictionary *contactDict = [[self.contacts filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"contactInfo == %@", contactInfo]] anyObject]; 

if (contactDict) // the object is found 

Но FacebookGroup s не ч ave ключ contactInfo, поэтому исключение выбрасывается. Я надеялся, что вместо исключения будет выбрано contactDict будет nil.

Как я могу найти NSSet различных объектов без исключения?

* Нагрузочный приложение из-за неперехваченного исключением 'NSUnknownKeyException', причина: "[valueForUndefinedKey]: сущность FacebookGroup не значение ключа кодирования совместимый для ключа "CONTACTINFO".

ответ

0

вы ищете объект является NSMutableDictionary, это способ признания его от других объектов, отправив сообщениеisKindOfClass. Поэтому вы должны создать предикат, который оценивает каждый объект:

NSPredicate* predicate= [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { 
    return [evaluatedObject isKindOfClass: [NSMutableDictionary class]]; 
}]; 
+0

Это было легко, спасибо :) –

0

Если вы создаете свой предикат, используя + (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block, то вы можете выполнить проверку в блоке, чтобы убедиться, что evaluatedObject имеет ключ, а затем выполнить соответствующую проверку.

Смежные вопросы