2

Swift から Objective-C コードを呼び出そうとしています。Swift Bridging Headerを作成し、Objective-C ファイル (例: ) にインポートを追加しました#import "UIColor+Utils.h"

プロジェクトがビルドされ、コード補完も表示されますが、そのコード行を実行しようとすると、クラッシュしてunrecognized selector sent to class.

私は何を間違えましたか?

(Xcode 6.2、iOS 8.2)

4

2 に答える 2

12

これは、ブリッジング ヘッダーに含まれているが、適切なターゲットに追加されていないファイルから拡張メソッドを呼び出そうとしたときに発生します。

これを修正するには、ファイルが現在実行中のものと同じターゲットのメンバーであることを確認してください。

たとえば、UIColor+Utils.mWatchKit 拡張機能から Objective-C コード (例: ) を呼び出そうとする場合、.m ファイル (例: ) のターゲット メンバーシップセクションUIColor+Utils.mに WatchKit 拡張機能が含まれている必要があります。

詳細については、以下を参照してください。


ファイルに .h ファイルを含めたがBridging-Header.h、ファイルをターゲットに追加するのを忘れた場合、次の動作が発生します。

独自のクラスでメソッドを呼び出そうとすると (例: ABCClass.doSomething()):

  • コード補完が得られます。
  • ビルド エラーが発生します: Undefined symbols for architecture x86_64

クラス拡張メソッドを呼び出そうとすると (例: UIColor.doSomething()):

  • コード補完が得られます。
  • ビルド エラーや警告は表示されません。
  • その行を実行しようとすると、クラッシュが発生します: unrecognized selector sent to class.
于 2015-04-03T18:19:25.073 に答える