我有以下情況: 我正在擴展UITextView control (MyTextView : UITextView)
。根據運行時設備版本,我有不同的實現。所以目前我在執行MyTextView
類時有很多「if-else」語句。沒有在所有構造函數中調用super的類實例化
爲了使其更容易維護,我想將它拆分到不同的類別:
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不執行被調用的具體方法。
是否有使其工作一個解決方法嗎?
爲什麼你不想在init方法中調用'super'? – sergio
我想了一會兒,你可以通過繼承'alloc'來處理這個問題,但可能不會。 (儘管如此,這是一種「巧妙」的方式來處理您的原始問題。) –