単体テストで作成するシンプルなNSManagedObject
の束を持っています。彼らはNSString *
タイプの単一のname
属性を持っています。私はいつも私のNSManagedObject
に同じentityName
とClass
という名前を与えます。Objective-Cクラスはどのようにして取得できますか?
私はユニットテストを設定するには、次のコードを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)
しかし、これは打ち鳴らす中に次の警告が発生します
variable = [NSEntityDescription insertNewObjectForEntityName:NSStringFromClass([typeof(variable) class])];
^
Expected expression
私も、私はIvar class_getInstanceVariable(Class cls, const char* name)
からObjective-CランタイムIVar
を使用してタイプを決定しようと考えていたが、ivar_getTypeEncoding
からタイプエンコーディングから入手できるだけIVar
型情報が十分ではありませんこれは、id
です。
誰かがコンパイル時または実行時にIVar
の型情報を取得する方法を考えることができますか?
これをコンパイルできるかどうかを確認した上でテストしたことはありませんが、 'typeof()'を削除して '[variable class]'にすることはできませんか? –
いいえ、 'variable'がnilであるためです。 –