Jak uzyskać klasę Objective-C ivar?
Mam kilka prostychNSManagedObject
s 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?