Como obtenho a classe Objective-C de um ivar?

Eu tenho um monte de simplesNSManagedObjects Eu crio em um teste de unidade. Eles só têm um úniconame atributo do tipoNSString *. Eu sempre dou minhaNSManagedObject o mesmoentityName eClass nome.

Eu quero evitar ter que escrever o código a seguir 30 vezes para configurar um teste de unidade:

@interface FooTest : GHTestCase {
Foo *foo;
}
@end
@implementation FooTest

- (void) setUp {
  [super setUp];

  foo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo"
                                      inManagedObjectContext:managedObjectContext];
  foo.name = @"foo";
}
@end

Desde afoo é um ivar, eu acho que deveria ser capaz de escrever uma macro para pegar o tipo defoo (Foo) e use para criar meuFoo:

#define InsertManagedObjectByVariable(variable) \
do { \
variable = [NSEntityDescription insertNewObjectForEntityName:NSStringFromClass([typeof(variable) class])]; \
variable.name = (NSString *) CFSTR(#variable);
} while(0)

No entanto, isso faz com que o seguinte aviso no clang:

variable = [NSEntityDescription insertNewObjectForEntityName:NSStringFromClass([typeof(variable) class])];
                                                                               ^
                                                             Expected expression

Eu também pensei que eu poderia tentar determinar o tipo usando o tempo de execução object-cIVar deIvar class_getInstanceVariable(Class cls, const char* name), mas o únicoIVar digite informações disponíveis a partir do tipo de codificação deivar_getTypeEncoding éid, o que não é suficiente.

Alguém pode pensar em uma maneira de obter as informações de tipo de umIVar em tempo de compilação ou tempo de execução?

questionAnswers(3)

yourAnswerToTheQuestion