NSManagedObject
単体テストで作成する単純なものがたくさんあります。name
タイプの属性は1つだけ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
はivarなので、 ( )の型を取得するマクロを記述して、 :を作成するために使用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
IVar
また、からのObjective-cランタイムを使用してタイプを判別できると思いましたが、からのタイプエンコーディングから入手できるタイプ情報はIvar class_getInstanceVariable(Class cls, const char* name)
、だけでは不十分です。IVar
ivar_getTypeEncoding
id
IVar
誰かがコンパイル時または実行時にのタイプ情報を取得する方法を考えることができますか?