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できるはずです。fooFooFoo
#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)、だけでは不十分です。IVarivar_getTypeEncodingid
IVar誰かがコンパイル時または実行時にのタイプ情報を取得する方法を考えることができますか?