2013-06-07 10 views
5

mam ten błąd:Auto synteza nieruchomość nie syntetyzują właściwość zadeklarowana w protokole choć jego realizowane

/business/Dropbox/badgers/BadgerNew/BGProfileView.m:56:17: Auto property synthesis will not synthesize property declared in a protocol 

Mam świadomość, że synteza właściwość auto nie syntetyzują właściwości zadeklarowane w protokole

Tak Syntetyzuję to samo.

Jest to protokół:

@protocol BGIhaveNavigationController <NSObject> 

@property (readonly)UINavigationController * navigationController;//This is the problematic property 

@end 

@protocol BGCommonProtocol <NSObject> 


@end 

chodzi o realizację

@interface BGProfileView : UIViewController 

@end 

jest UIViewController a jak wiemy UIViewController ma właściwość navigationController. Co jest nie tak?

Robi się problematyczne, gdy używam to:

@interface BGProfileView() <BGReviewsTableDelegateProtocol> 

protokół BGReviewsTableDelegateProtocol dziedziczy protokół BGIhaveNavigationController

mogę usunąć ostrzeżenie dodając:

-(UINavigationController *) navigationController 
{ 
    return self.navigationController; 
} 

Ale to absurd. W pewnym sensie

-(UINavigationController *) navigationController 
    { 
     return self.navigationController; 
    } 

-(UINavigationController *) navigationController już istnieć przez UINavigationController

+1

Spróbuj @dynamic navigationController; – Wain

+0

działa. Ale dlaczego? navigationController nie ma. –

+2

Używasz protokołu, aby zastąpić metodę na istniejącej klasie. To nigdy nie jest dobry pomysł. @dynamic działa, ponieważ obiecuje, że będzie tam implementacja w czasie wykonywania, ale jeśli wszystko, co jest zgodne z tym protokołem, jest kontrolerem widoku, dlaczego protokół wymaga właściwości navigationController? – jrturton

Odpowiedz

10

Użyj

@dynamic navigationController; 

ten informuje kompilator, że realizacja nieruchomość jest „gdzieś indziej” i że powinien zaufać, że wymóg będzie spełnione w czasie wykonywania. W praktyce oznacza to, że znajduje się w superklasie.

Jeśli spróbujesz zaimplementować to samodzielnie, otrzymasz zduplikowane miejsce do przechowywania (więc prawdopodobnie nie będzie działać tak, jak się spodziewasz) lub rekurencję.

+1

to NIE działa w Xcode6 – Jacky

+0

wydaje się działać w 6.3.1 –

+0

Działa również w 6.4 –

Powiązane problemy