2011-11-29 16 views
5

ten błąd pojawia się:Nie można zainicjować parametr i nie rozumiem dlaczego

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

Od tej linii kodu:

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

Jak mogę rozwiązać ten problem?

+0

ARC jak mniemam? Będziesz wtedy potrzebował zmontowanej obsady. – Macmade

+0

Czy możesz wyjaśnić, jak mogę to zrobić? I tak, ARC – Pillblast

+0

Nieważne, googlowałem i dowiedziałem się, co to jest za mostek. Dziękuję bardzo za odpowiedź, chciałbym móc wybrać komentarz jako odpowiedź – Pillblast

Odpowiedz

5

Dzięki komentarzowi Macmade udało mi się rozwiązać problem. Należy Pisałem to w ten sposób:

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

Gdzie (id) jest zmostkowany oddanych mu chodziło.

1

wykorzystanie tej linii od kodu dla tego wydania

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

Jeśli dobrze rozumiem to poprawnie, problemem nie jest to, że trzeba Bridged obsady, a klasa FirstViewController nie definiuje klasę interfejsu ZXingDelegate, stąd ten problem.

ZXingDelegate jest klasą interfejsu (opartą na nazwie) (protokół lub delegata), która deklaruje funkcje (interfejs), które muszą być zdefiniowane przez klasę, która je dziedziczy (chyba że są @optional). Coś jak czysto wirtualne (abstrakcyjne) klasy w C++.

Tak należałoby w nagłówku pliku coś takiego:

@interface FirstViewController : UIViewController <ZXingDelegate> 

A w pliku .m, coś takiego:

@implementation FirstViewController 

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


@end 
Powiązane problemy