Sword 3でクラスを作成して、Cordovaプラグインを実装しようとしています。私はこのビルドと実行を持っていますが、クラスのプロパティにアクセスするたびにアプリケーションがクラッシュします。私players
プロパティが使用されている場合しかし、結果はヌルのように見えるアドレスで、EXC_BAD_ACCESS例外ですObjective Cコードで構築したときにSwiftクラスのプロパティが初期化されない
@objc(DSFMediaCentre)
class DSFMediaCentre : CDVPlugin
{
var players = [UUID:DSFPlayerHandler]();
...
}
と
@objc(DSFMediaCentre)
class DSFMediaCentre : CDVPlugin
{
var players :[UUID:DSFPlayerHandler];
override init() {
players = [:];
}
...
}
:私はクラスの初期化の二つの方法を試してみましたポインタ逆参照。
オブジェクトは、私は全くとまったく知識がない言語であるObjective Cのコードで作成されているが、私は、これは、それを作成する行であると思う:
obj = [[NSClassFromString(className)alloc] initWithWebViewEngine:_webViewEngine];
CDVPlugin
クラスにはコメントが含まれていますinitWithWebViewEngine
を無効にするべきではないと述べています(実際にはCDVPlugin.m
ファイルで宣言されていますが、CDVPlugin.h
には記載されていないため、このメソッドをオーバーライドすることはできません。それについて知るために)、むしろ初期化コードはと呼ばれる方法に置かれるべきです代わりに。しかし、私がそれを行うと、コンパイラエラー(「クラスDSFMediaCentreに初期化子がありません」)が表示されます。
さらに、私は後ろに私のinit()
方法を入れて、このように、pluginInitialize()
を呼び出すようにそれを設定した場合:
はでsuper.initコールで初期化されていません
override init() {
super.init(); // necessary otherwise next line is an error
pluginInitialize();
}
override func pluginInitialize() {
players = [:];
}
"
このクラスを正しく初期化するにはどうすればよいですか?
非nulableおそらく、あなたはスウィフト4を使用していることはありません。 Objective-Cから@objcでアクセスされるクラス+ ivarsに接頭辞を付ける必要がありますか? – Rog
いいえ、私はスイフト3を使用しています。それを質問に追加します。速い4をまだ見ていない。 – Jules