我有以下情况:我正在扩展UITextView control (MyTextView : UITextView)
. 根据运行时设备版本,我有不同的实现。所以目前我在MyTextView
类的实现中有很多“if-else”语句。
为了使其更易于维护,我想将它分成不同的类:
MyTextViewIos5 : MyTextView
,MyTextViewIos6:MyTextView
并创建一个工厂函数,该函数将在运行时根据设备 iOS 版本知道要创建哪个子类。
如果我使用 MyTextView 作为参数,此解决方案非常有效。
MyTextView* textView = [Factory createWithFrame:frame];
当有一个类继承MyTextView (externalTextView:MyTextView)
并使用特定方法扩展它时,问题就开始了,它的initWithFrame
方法如下所示:
- (id)initWithFrame:(CGRect)frame {
self = [Factory createWithFrame:frame];
if (self) {
...
}
return self;
}
我没有打电话给超级,而是打电话initwithFrame
给我的工厂。
当我调用externalTextView
特定方法时,应用程序崩溃并显示MyTextViewIos5或MyTextViewIos6未实现所调用的特定方法的错误。
是否有使其工作的解决方法?