2010-04-09 38 views
0

在iPad應用程序中,我使用UIView的自定義子類和UIViewController。這裏的視野頭:清除UIView和UIViewController的「可能不響應」警告

@interface pdfView : UIView { 
    CGPDFDocumentRef doc; 
} 

-(void)setDoc:(CGPDFDocumentRef)newDoc; 

@end 

而這裏的控制器頭:控制器執行的

@interface iPadPDFTestViewController : UIViewController { 
    CGPDFDocumentRef doc; 
} 

- (void)loadPDF; 

@end 

部分:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self loadPDF]; 
    [self.view setDoc:doc]; 
} 

在Interface Builder中,我給自己定的視圖對象使用類pdfView。

編譯時,[self.view setDoc:doc];給出警告「'UIView'可能不會響應'--setDoc'。」我猜這個警告是因爲編譯器認爲它看着UIView(它不會實現setDoc方法)而不是pdfView而出現的。但爲什麼會這樣想呢?我怎麼能告訴它它真的在看什麼類,以清除警告?

回答

5

編譯器只知道代碼定義了什麼,而UIViewController將它的view屬性定義爲UIView,這就是爲什麼你會看到警告。

您可以通過將視圖轉換爲PDFView來避免警告:(PDFView *)self.view;

爲了使這個簡單實現一個基本的getter方法

- (PDFView *)view { 
    return (PDFView *)self.view; 
} 

而且,正如一個側面說明,讓他們用於至少一個大寫字符開始,最好是一種前綴(即PDFView你真的應該命名您的類,最好是MYPDFView(其中MY是自定義前綴))。

+1

想了解@ dannywartnaby關於在Objective-C中爲類名添加前綴以防止名稱空間衝突的重要一點的深層次處理:http://stackoverflow.com/questions/178434/what-is-the-best-way-to- solve-an-objective-c-namespace-collision – 2010-04-09 16:30:58

+0

謝謝!這就像一個魅力。你的解釋是非常有用的 - 我現在看到編譯器從'view'屬性的定義中獲取它的類型信息。我現在正在做的是這樣的:'[(PDFView *)self.view setDoc:doc];' – rlkw1024 2010-04-10 23:18:58

相關問題