Tengo una serie de objetos de "política" que pensé que sería conveniente implementar como métodos de clase en un conjunto de clases de políticas. He especificado un protocolo para esto, y creado clases para ajustarse a (sólo una se muestra a continuación)¿Cómo llamo a los métodos de + clase en Objective C sin hacer referencia a la clase?
@protocol Counter
+(NSInteger) countFor: (Model *)model;
@end
@interface CurrentListCounter : NSObject <Counter>
+(NSInteger) countFor: (Model *)model;
@end
entonces tengo una matriz de las clases que se ajustan a este protocolo (como CurrentListCounter hace)
+(NSArray *) availableCounters {
return [[[NSArray alloc] initWithObjects: [CurrentListCounter class], [AllListsCounter class], nil] autorelease];
}
Observe cómo estoy usando las clases como objetos (y este podría ser mi problema - en clases Smalltalk son objetos como todo lo demás - No estoy seguro de si están en Objective-C?)
Mi problema es exactamente cuando quiero llamar al método cuando tomo uno de los po lítica objetos fuera de la matriz:
id<Counter> counter = [[MyModel availableCounters] objectAtIndex: self.index];
return [counter countFor: self];
recibo una advertencia en la instrucción de retorno - dice -countFor: no se ha encontrado en el protocolo (por lo que su asumiendo su un método de instancia donde quiero llamar a un método de clase). Sin embargo, como los objetos en mi matriz son instancias de clase, ahora son como los métodos de instancia (o conceptualmente deberían serlo).
¿Existe alguna forma mágica de llamar a los métodos de clase? ¿O es solo una mala idea y debería simplemente crear instancias de mis objetos de política (y no usar métodos de clase)?
Contador no contador –