こんにちは、オフィス狛 モバイル開発担当 Aika-yuy です。
今回の投稿は、 Xcode10.2以降にアップデートした後にクラッシュする機能があったので、
解決方法を備忘録として残しておこうと思います。
・発生した事象
・Xcode10.1で作られていたアプリがあり、改修を行う事になったのですが、Xcodeのアップデータがあったので、10.2へアップデートした。・ビルドは問題なく通ったが、一部の機能を実行すると、アプリが落ちるようになった。
という事で、修正前のコードです。こちらを実行したところ落ちてしまい下記のエラーが出ました。
public init(_ coder: NSCoder? = nil) { if let coder = coder { super.init(coder: coder)! } } public override init(frame:CGRect) { super.init(frame:frame) self.initialize() }
Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder
・前提条件
・Objective-CとSwiftでは、呼び出し時の型が違う。・型を合わせる為に、「@objc」を付ける
・エラーになる理由
Xcode10.2になって、コンパイラーの仕様が変更され、 今まで@objc推論が行われていたが、行われなくなったのでエラーになってしまったようです。・対応方法
「@objc」が自動で付かなくなったので、必要ならば明示的に付けないと、Objective-CからSwiftをCallする時に落ちてしまいます。該当する箇所を修正しました。
@objc public init(_ coder: NSCoder? = nil) { if let coder = coder { super.init(coder: coder)! } } @objc public override init(frame:CGRect) { super.init(frame:frame) self.initialize() }
@objcをつけることで、使用することができました。
ios , Objective-C , Swift
0 件のコメント:
コメントを投稿