2011-11-23 10 views
6

मैं इस कोड है और बंदरगाह यह चाप की जरूरत है, लेकिन मैं न पता है कि:मैं आर्क में class_createInstance को कैसे बदल सकता हूं?

 case FIELDTYPE_OBJECT: 
      className = [fieldType substringWithRange:NSMakeRange(2, [fieldType length]-3)]; 
      rel = class_createInstance(NSClassFromString(className), sizeof(unsigned)); 
      Class theClass = [rel class]; 

      if ([rel isKindOfClass:[DbObject class]]) { 
       //Load the record... 
       NSInteger Id = [rs intForColumn:[theClass relationName]]; 
       if (Id==0) { 
        fieldValue = [rel init]; 
       } else {      
        Db *db = [Db currentDb]; 

        fieldValue = [db loadById: theClass theId:Id]; 
       } 
      } 
      break; 

त्रुटि है:

error: 'class_createInstance' is unavailable: not available in automatic reference counting mode 

यह कैसे बदलें?

मुझे रनटाइम में कक्षा वस्तुओं का निर्माण करने की आवश्यकता है।

उत्तर

1

इस प्रयास करें:

#include <objc/objc-runtime.h> 
id object = [[NSClassFromString(@"TheClassName") alloc] init]; 
+1

वह class_createInstance –

+0

पर अतिरिक्त बाइट पैरामीटर को संभाल नहीं पाएगा क्या यह अभी भी आवंटन init का उपयोग करते समय आवश्यक है? –

+0

यदि कोड अतिरिक्त बाइट्स का उपयोग करता है, हाँ। अन्यथा, –

3

सबसे सरल समाधान अन्य फ़ाइल जो -fno-ObjC-चाप इस पर सेट है जोड़ने के लिए है, और एक समारोह जो class_createInstance() के रूप में ऊपर कॉल है जो।

1

अलग .h/.c फ़ाइलों को बनाएं और इस तरह कुछ डालें।

id const 
MyCreateInstanceOfClass(Class const class) 
{ 
    id  instance = class_createInstance(class, 0); 
    return instance; 
} 

#include.h, और यह कहते हैं। प्रत्येक फ़ाइल के लिए -fno-bjc-arc स्विच करने की आवश्यकता नहीं है।