清除UIView和UIViewController的"可能没有响应"警告

rlk*_*024 0 iphone cocoa-touch objective-c uikit ipad

在iPad应用程序中,我正在使用UIView的自定义子类和UIViewController.这是视图标题:

@interface pdfView : UIView {
    CGPDFDocumentRef doc;
}

-(void)setDoc:(CGPDFDocumentRef)newDoc;

@end
Run Code Online (Sandbox Code Playgroud)

这是控制器头:

@interface iPadPDFTestViewController : UIViewController {
    CGPDFDocumentRef doc;
}

- (void)loadPDF;

@end
Run Code Online (Sandbox Code Playgroud)

控制器实现的一部分:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self loadPDF];
    [self.view setDoc:doc];
}
Run Code Online (Sandbox Code Playgroud)

在Interface Builder中,我将视图对象设置为使用类pdfView.

在编译时,[self.view setDoc:doc];会发出警告"'UIView'可能无法响应'--setDoc'." 我猜这个警告出现是因为编译器认为它正在查看UIView(它没有实现setDoc方法)而不是pdfView.但为什么会这么想?我怎么能告诉它它正在看什么类,以便清除警告?

dan*_*aby 5

编译器只知道代码定义的内容,UIViewController将它的view属性定义为UIView,这就是你看到警告的原因.

您可以通过将视图转换为PDFView来避免警告:(PDFView*)self.view;

为了简化这个实现一个基本的getter方法

- (PDFView *)view {
    return (PDFView *)self.view;
}
Run Code Online (Sandbox Code Playgroud)

另外,作为附注,你应该真正命名你的类,所以他们从至少一个大写字符开始,理想情况下是一个前缀(即PDFView,理想情况下MYPDFView(其中MY是自定义前缀)).