こんにちは、オフィス狛 モバイル開発担当 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 件のコメント:
コメントを投稿