2011-06-15 19 views
7
+(BOOL)resolveClassMethod:(SEL)aSel { 
    NSString *lString = NSStringFromSelector(aSel); 

    if ([self validateLetterAndAccidental:lString]) { 

     id (^noteFactoryBLOCK)(id) = ^(id aSelf) { 
      return [self noteWithString:lString]; 
     }; 

     IMP lIMP = imp_implementationWithBlock(noteFactoryBLOCK); 
     ... 

मुझे अंतिम पंक्ति में एक त्रुटि मिलती है क्योंकि नोटफैक्टरीब्लॉक को शून्य * पर डाला जाता है और एआरसी इसे अस्वीकार करता है। क्या वर्तमान में मैं जो चाहता हूं उसे पूरा करने का एक तरीका है? मुझे एक आईएमपी चाहिए कि मैं रनटाइम पर class_addMethod को पास कर सकता हूं।डायनामिक क्लास विधि रिज़ॉल्यूशन

संपादित

IMP myIMP = imp_implementationWithBlock(objc_unretainedPointer(noteFactoryBLOCK)); 

यह पंक्ति मुझे एक त्रुटि के बजाय एक चेतावनी दे - Semantic Issue: Passing 'objc_objectptr_t' (aka 'const void *') to parameter of type 'void *' discards qualifiers

+0

एआरसी अब सार्वजनिक है! Http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-June/015588.html –

उत्तर

2

मैं यह कहना नफरत लेकिन आप केवल इस मामले में स्थिरांक दूर कास्ट करने के लिए हो सकता है।

IMP myIMP = imp_implementationWithBlock((void*)objc_unretainedPointer(noteFactoryBLOCK));

कि हालांकि बहुत बदसूरत है।

+0

वास्तव में बदसूरत देखें। मैंने वास्तव में विकल्प विकल्प भी नहीं माना था क्योंकि मैंने सोचा था कि यह किसी भी तरह का विकल्प नहीं था। – griotspeak

संबंधित मुद्दे