警告:'UIResponder'可能无法响应'-manageTouches:'

时间:2009-11-21 14:34:23

标签: iphone objective-c cocoa-touch

这是我的计划。

//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个警告。

我正确地获得了所需的输出但是如何解决警告。

1 个答案:

答案 0 :(得分:2)

首先,由于您的代码与iPhone in Action中的列表14.2完全相同,您是否记得将列表14.3中-manageTouches:的代码复制到您的班级?

假设你这样做,问题是nextResponder属性指向UIResponder的一个实例,它可以是任何事物(你的类,一个窗口,一些其他操作系统管理的东西)。 ...),并且编译器不确定此特定响应者是否实现了方法-manageTouches:。您的选择基本上要么与警告一起生活,要么将nextResponder的值投射到您的班级。 (FWIW,第247页的底部提到了这一点。)

就此而言,在运行时并不真正知道下一个响应者会响应该消息。为安全起见,您可能希望使用-respondsToSelector:-isKindOfClass:来验证该假设。