Jak uzyskać klasę Objective-C ivar?

Mam kilka prostychNSManagedObjects Tworzę w teście jednostkowym. Po prostu mają singielname atrybut typuNSString *. Zawsze daję mojeNSManagedObject to samoentityName iClass imię.

Chcę uniknąć konieczności pisania następującego kodu 30 razy, aby skonfigurować test jednostkowy:

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

- (void) setUp {
  [super setUp];

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

Odfoo jest ivar, myślę, że powinienem móc napisać makro, aby pobrać typfoo (Foo) i użyj, aby utworzyć mójFoo:

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

Powoduje to jednak następujące ostrzeżenie w clang:

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

Pomyślałem też, że mogę spróbować określić typ za pomocą środowiska wykonawczego obiektywu-cIVar zIvar class_getInstanceVariable(Class cls, const char* name), ale jedynyIVar informacje o typie dostępne z kodowania typu zivar_getTypeEncoding jestid, co nie wystarczy.

Czy ktoś może wymyślić sposób na uzyskanie informacji o typieIVar w czasie kompilacji lub w czasie wykonywania?

questionAnswers(3)

yourAnswerToTheQuestion