我有个好主意在UITouch类上使用一个协议来扩展它,并使用协议中声明的一些方法。这种构造的原因是在框架内向其他用户提供协议,他们可以发送类似UITouch的数据对象(因为他们无法创建本机UITouch对象)。
协议(myProtocol.h)非常简单:
// myProtocol.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@protocol myProtocol <NSObject>
- (CGFloat) MYPREFIX_radius;
@end
现在我使用该协议在UITouch上进行了简单的扩展
// UITouch+MYPREFIX_Extension.h
#import <UIKit/UIKit.h>
#import "myProtocol.h"
@interface UITouch (MYPREFIX_Extension) <myProtocol>
@end
和
// UITouch+MYPREFIX_Extension.m
#import "UITouch+MYPREFIX_Extension.h"
@implementation UITouch (MYPREFIX_Extension)
- (CGFloat) MYPREFIX_radius {
return self.majorRadius;
}
@end
通过这一切对我来说都很好。现在我构建了一个touchRecognizer。
// touchRecognizer.h
#import <UIKit/UIKit.h>
@interface touchRecognizer : UITouch
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
@end
在touchRecognizer.m中,问题就出现了。在那里我使用协议将UITouch对象转换为NSObject。然后我只想访问新定义的方法MYPREFIX_radius,它应该给我回UITouch.major_radius。
// touchRecognizer.m
#import "touchRecognizer.h"
#import "UITouch+MYPREFIX_Extension.h"
@interface touchRecognizer()
@end
@implementation touchRecognizer
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for(NSObject<myProtocol> *touch in touches) {
NSLog(@"radius %f", touch.MYPREFIX_radius);
}
}
@end
但是当我运行代码时,它只给了我错误
- [UITouch MYPREFIX_radius]:无法识别的选择器发送到实例0x1701887b0
我不明白。我错过了什么?
感谢您的帮助。
答案 0 :(得分:0)
我猜你忘记将实现文件(UITouch+MYPREFIX_Extension.m
)添加到构建目标