使用协议通过扩展的多个数据对象

时间:2015-01-23 12:43:39

标签: ios objective-c protocols uitouch

我有个好主意在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

我不明白。我错过了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我猜你忘记将实现文件(UITouch+MYPREFIX_Extension.m)添加到构建目标