NSManagedObject我在单元测试中创建了一堆简单的 s。它们只有一个nametype 属性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是 ivar,我认为我应该能够编写一个宏来获取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
我还认为我可以尝试使用来自 的objective-c 运行时来确定类型,但是IVar来自类型编码Ivar class_getInstanceVariable(Class cls, const char* name)的唯一IVar类型信息ivar_getTypeEncoding是id,这还不够。
IVar有人能想出一种在编译时或运行时获取类型信息的方法吗?