मेरे पास एक यूनिट टेस्ट में सरल NSManagedObject
एस का एक गुच्छा है। उनके पास NSString *
प्रकार की एक name
विशेषता है। मैं हमेशा अपना NSManagedObject
वही entityName
और Class
नाम देता हूं।मैं ivar का उद्देश्य-सी वर्ग कैसे प्राप्त करूं?
@interface FooTest : GHTestCase {
Foo *foo;
}
@end
@implementation FooTest
- (void) setUp {
[super setUp];
foo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo"
inManagedObjectContext:managedObjectContext];
foo.name = @"foo";
}
@end
foo
के बाद से एक इवर है, मुझे लगता है मैं हड़पने के लिए एक मैक्रो लिखने के लिए सक्षम होना चाहिए लगता होगा:
मैं निम्नलिखित कोड एक इकाई परीक्षण स्थापित करने के लिए 30 बार लिखने के लिए होने से बचने के लिए चाहते हैं 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)
से ऑब्जेक्टिव-सी क्रम IVar
का उपयोग कर प्रकार निर्धारित करने की कोशिश कर सकते हैं, लेकिन ivar_getTypeEncoding
से प्रकार एन्कोडिंग से केवल IVar
प्रकार की जानकारी उपलब्ध id
है, जो पर्याप्त नहीं है।
क्या कोई संकलन समय या रनटाइम पर IVar
की प्रकार की जानकारी प्राप्त करने का तरीका सोच सकता है?
यह जांचने से परे इसका परीक्षण नहीं किया गया है कि क्या यह संकलित करता है लेकिन क्या आप 'टाइपऑफ() 'ड्रॉप नहीं कर सकते और' [चर क्लास]' के साथ नहीं जा सकते? –
नहीं, क्योंकि 'चर' शून्य है। –