Как я могу получить Objective-C класса ивара?

У меня есть куча простыхNSManagedObjects я создаю в модульном тесте. У них просто есть одинname атрибут типаNSString *, Я всегда даюNSManagedObject тот же самыйentityName а такжеClass название.

Я хочу избежать необходимости писать следующий код 30 раз для настройки модульного теста:

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

- (void) setUp {
  [super setUp];

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

посколькуfoo это ивар, я думаю, я должен быть в состоянии написать макрос, чтобы захватить типfoo (Foo) и использовать для создания моегоFoo:

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

Тем не менее, это вызывает следующее предупреждение в Clang:

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

Я также подумал, что могу попытаться определить тип, используя время выполнения target-cIVar отIvar class_getInstanceVariable(Class cls, const char* name), но единственныйIVar информация о типе доступна из кодировки типа изivar_getTypeEncoding являетсяid, что недостаточно.

Может кто-нибудь придумать способ получения информации о типеIVar или во время компиляции или во время выполнения?

Ответы на вопрос(3)

Ваш ответ на вопрос