2011-06-15 9 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); 
     ... 

için boşluk * kullanıcısına bir blok döküm. Şu anda istediğimi gerçekleştirmenin bir yolu var mı? Çalışma zamanında class_addMethod öğesine iletebileceğim bir IMP istiyorum.noteFactoryBLOCK bir boşluk * artığını ve ARC bu izin vermediğinden Geçen satırında bir hata alıyorum dinamik sınıf yöntemi çözünürlüğü

DÜZENLEME

IMP myIMP = imp_implementationWithBlock(objc_unretainedPointer(noteFactoryBLOCK)); 

Bu çizgi yerine bana bir hata bir uyarı vermek - Semantic Issue: Passing 'objc_objectptr_t' (aka 'const void *') to parameter of type 'void *' discards qualifiers

+0

ARC artık herkese açık! Bkz. Http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-June/015588.html –

cevap

2

Bunu söylemekten nefret ediyorum ama sadece bu durumda const Yayınlayabilmemiz gerekebilir. gerçi oldukça çirkin

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

.

+0

Gerçekten çirkin. Opsiyonu gerçekten düşünmedim bile, bir şekilde bir seçenek olmadığını düşündüm. – griotspeak