[解決済み] イニシャライザーがスーパークラスから指定されたイニシャライザーをオーバーライドしていない
質問
Xcode 6.3 Beta 3にアップグレードしたところ、以下のようなエラーが多発するようになりました。
イニシャライザーが、そのスーパークラスから指定されたイニシャライザーをオーバーライドしていません。
override init() {
super.init()
}
例えばこれは
UIButton
クラスがあります。
class CustomButton: UIButton {
var target: AnyObject!
var selector: Selector!
var action: (() -> Void)!
override init() { // Initializer does not override a designated initializer from its superclass
super.init() // Must call a designated initializer of the superclass 'UIButton'
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
}
これは私の
UIViewController
クラスがあります。
class CustomAlertView: UIViewController {
required init(coder aDecoder: NSCoder) {
fatalError("NSCoding not supported")
}
required override init() { // Initializer does not override a designated initializer from its superclass
super.init() // Must call a designated initializer of the superclass 'UIViewController'
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
}
解決方法は?
私の解決策は、迅速な修正ですが、Appleがリリースノートで目的としているものよりも簡単だと思います。詳細については、19775924を検索してください。 http://adcdownload.apple.com//Developer_Tools/Xcode_6.3_beta_3/Xcode_6.3_beta_3_Release_Notes.pdf こちらです。Appleが言っているのは、Objective-Cのファイルを作ってそれを拡張する(ヘッダーファイルなどに追加する必要がある)ということで、"Known Issues in Xcode 6.3 beta 3" にあるので、私がやったことは簡単にできると思う。
これは、私が修正した方法です。
UIButton
:
class CustomButton : UIButton {
init() {
super.init(frame: CGRectZero)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
そして、これは私のViewControllerの一つです(必要なければpublicを削除してください)。
public class GenericViewController: UIViewController {
public init() {
super.init(nibName: nil, bundle: nil)
}
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
私はIBを使わないので、同じく
UIView
というのも、私はビューと
viewController
(必要なければpublicを削除)。
public class GenericMenuView: UIView {
public init() {
super.init(frame: CGRectZero)
}
public required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
この機能はビューで特に必要です。
setupViews
メソッドをすべてのサブクラスでオーバーライドし、init時に呼び出されるようにしています。そして、AutoLayoutを使用して、私はフレームを必要としません(だから、私はフレームパラメータでinitをオーバーライドしません)。
ということは
override
. ああ!そして、必ず
self.init()
でないとクラスは初期化されません(そして内部タイムアウトでクラッシュします)。
関連
-
[解決済み】arm64アーキテクチャの未定義シンボルについて
-
[解決済み】iOS 9.0より前のUIStackView
-
[解決済み】クラスは両方で実装されており、どちらかが使用されることになります。どちらが未定義か
-
[解決済み] Xcodeで "No such module "というエラーが出るが、フレームワークはある
-
[解決済み] NSIntegerからNSStringデータ型に変換するにはどうすればよいですか?
-
[解決済み] iOS 9 : ユニバーサルアプリの警告「アプリがフルスクリーンを必要としない限り、すべてのインターフェイスの向きをサポートする必要があります」。
-
[解決済み] viewDidLoad()は何のためにあるのですか?[重複]する
-
[解決済み] Stringをformatで作成するには?
-
[解決済み] アラート "デバッグを続けるには、開発者ツールへのアクセスが他のプロセスの制御を必要とします。これを許可するにはパスワードを入力してください。
-
[解決済み] HTTPの読み込みに失敗しました(エラーコード:-1200 [3:-9802])。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンカーコマンドが終了コード1で失敗(起動を確認するには-vを使用)、Xcode 8、Swift 3
-
[解決済み] "CFNetwork SSLHandshake failed (-9806)" の解決方法について
-
[解決済み] Cordova Camera iOSの問題。NOT_FOUND_ERR
-
[解決済み] シミュレータへのサービス接続の開始に失敗しました Xcode
-
[解決済み] Xcodeのロギング。"Metal API Validation Enabled"
-
[解決済み] ブリッジングヘッダ用のプリコンパイルヘッダの発行に失敗しました。
-
[解決済み] #ifdef DEBUG 対 #if DEBUG
-
[解決済み] なぜibtoolはexit code 255で失敗したのでしょうか?
-
[解決済み] CocoaPods は、ポッド "Firebase/CoreOnly" の互換性のあるバージョンを見つけられませんでした。
-
[解決済み] 条件付きバインディング:letエラーの場合 - 条件付きバインディングのイニシャライザーはOptional型でなければならない