2011-11-29 17 views
5

Bu hata alıyorum edilir: parametreyi başlatılamıyor ve anlamıyorum neden

ZXingWidgetController *widController = 
    [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES 
                  OneDMode:NO]; 

Bunu nasıl çözebiliriz: Bu kod satırından

Cannot initialize a parameter of type 'id<ZXingDelegate>' 
with an lvalue of type 'FirstViewController *const __strong' 

?

+0

ARC? Daha sonra köprülü bir oyuncuya ihtiyacınız olacak. – Macmade

+0

Biraz bunu nasıl açıklayabilirim? Ve evet, ARC – Pillblast

+0

Nevermind, ben googled ve bir bridget cast ne olduğunu öğrendim. Cevabınız için çok teşekkür ederim, keşke bir cevap olarak yorum seçebilseydim – Pillblast

cevap

5

Macmade'in yorumu sayesinde sorunu çözmeyi başardım. Ben öyle yazdım olmalıdır:

(id) o bahsettiği köprülü atıldı
ZXingWidgetController *widController = 
    [[ZXingWidgetController alloc] initWithDelegate:***(id)** self showCancel:YES 
                    OneDMode:NO]; 

.

1

kullanımı bu konuda

ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:(id<ZXingDelegate>)self showCancel:YES OneDMode:NO]; 
0

için kod kapalı bu hat bunu doğru anladıysam, sorun daha çok kendi başınıza FirstViewController sınıf ZXingDelegate arabirim sınıfı, böylece sorunu tanımlama değil, köprülü döküm gerektiğini değildir.

ZXingDelegate fonksiyonları (bunlar @optional olmadıkça) o devralır sınıfı tarafından tanımlanmış olmalıdır (arayüz) beyan eder arabirim sınıfının (protokol, ya da gözlemci) (sanırım adına göre) olduğunu. C++ 'da saf sanal (soyut) sınıflar gibi bir şey. Böyle

@interface FirstViewController : UIViewController <ZXingDelegate> 

Ve .m dosyasında, bir şey:

Yani başlık dosyası böyle bir şeye ihtiyacım olacağını sanırım

@implementation FirstViewController 

//...... 
-(void) SomeFunctionThat_ZXingDelegate_declares 
{ 
    // .... do something here.... 
} 
//...... 


@end