这是我的计划。
//Interface file.
#import <Foundation/Foundation.h>
@interface reportView : UIView {
}
- (void)touchesBegan: (NSSet *)touches withEvent: (UIEvent *)event;
- (void)touchesEnded: (NSSet *)touches withEvent: (UIEvent *)event;
- (void)touchesMoved: (NSSet *)touches withEvent: (UIEvent *)event;
@end
//ImplementationFile.
#import "reportView.h"
@implementation reportView
- (void) touchesBegan: (NSSet *)touches withEvent: (UIEvent *)event{
[self.nextResponder manageTouches:touches];
}
- (void) touchesEnded: (NSSet *)touches withEvent: (UIEvent *) event{
[self.nextResponder manageTouches:touches];
}
- (void) touchesMoved: (NSSet *)touches withEvent: (UIEvent *)event{
[self.nextResponder manageTouches:touches];
}
@end
我收到了警告。 警告:'UIResponder'可能无法响应'-manageTouches:' 我上面有3个警告。
我正确地获得了所需的输出但是如何解决警告。
答案 0 :(得分:2)
首先,由于您的代码与iPhone in Action中的列表14.2完全相同,您是否记得将列表14.3中-manageTouches:
的代码复制到您的班级?
假设你这样做,问题是nextResponder
属性指向UIResponder
的一个实例,它可以是任何事物(你的类,一个窗口,一些其他操作系统管理的东西)。 ...),并且编译器不确定此特定响应者是否实现了方法-manageTouches:
。您的选择基本上要么与警告一起生活,要么将nextResponder
的值投射到您的班级。 (FWIW,第247页的底部提到了这一点。)
就此而言,你在运行时并不真正知道下一个响应者会响应该消息。为安全起见,您可能希望使用-respondsToSelector:
或-isKindOfClass:
来验证该假设。