NSManagedObject
我在单元测试中创建了一堆简单的 s。它们只有一个name
type 属性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
有人能想出一种在编译时或运行时获取类型信息的方法吗?