Como posso acessar subconjuntos específicos de uma grande NSDictionary em Cocoa?
-
22-07-2019 - |
Pergunta
Eu tenho um único objeto NSDictionary que contém um grande número de objetos personalizados. Os objectos será ou de classe B ou da classe C, sendo que ambos são herdados da Classe A. Se os objectos são de tipo B, eles terão uma bandeira interna (kindOfCIsh) que irá ser utilizado para agrupar futuro.
Como posso, em momentos diferentes em meu programa, obter um NSDictionary (ou NSArray) que contém diferentes agrupamentos desses objetos? Em um caso, eu quero que todos B, mas outra vez eu vai querer todos os objetos C, mais o B objetos que satisfazem (kindOfCIsh == true).
Existe uma simples maneira de obter acesso a esses subconjuntos? Talvez usando predicados de filtro? Eu posso, naturalmente, percorrer o dicionário inteiro e construir o subconjunto necessário manualmente, mas tenho a sensação de que há uma maneira melhor.
Qualquer ajuda é apreciada.
Solução
[[myDictionary allvalues] filteredArrayUsingPredicate: pred];
Outras dicas
Você pode usar categorias
O código é algo como isto
@interface NSDictionary (dictionaryForClass)
-(NSMutableDictionary *) dictionaryWithObjectsKindOfClass:(Class)myClass;
@end
@implementation NSDictionary (dictionaryForClass)
-(NSMutableDictionary *) dictionaryWithObjectsKindOfClass:(Class)myClass;
{
NSMutableDictionary *ret = [[[NSMutableDictionary alloc] init] autorelease];
for (id object in self) {
if ([object isKindOfClass:myClass]) {
[ret addObject:object];
}
}
return ret;
}
@end