問題タブ [objective-c-runtime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
10 に答える
24913 参照

objective-c - プロパティ名を文字列として取得

プロパティを渡し、それに割り当てられた名前を取得する方法が必要です。助言がありますか?

0 投票する
3 に答える
2063 参照

objective-c - Objective-cでランタイムブロックタイプのメタデータを取得するには?

オブジェクトと観察するプロパティを登録するクラスを書いています。プロパティが 以外のものに設定されるとnil、登録されたコールバック セレクターが呼び出されます (target-action など)。セレクターには 3 つの異なるシグネチャーがあり、登録された型に応じて適切なシグネチャーが呼び出されます。

これは問題なく動作しますが、「コールバック関数」としてセレクターの代わりにブロックを登録する機能を追加したいと考えています。提供されたブロックの関数シグネチャを見つけて、提供されたブロックのタイプに応じて異なる方法でコールバックを処理することは可能ですか?

例えば:

何か案は?

特定の 'ed Block 引数を使用してさまざまなレジスタ関数を作成できることはわかっていtypedefますが、可能であれば単一の関数を使用したいと考えています。

0 投票する
1 に答える
447 参照

objective-c - Objective-C:連想オブジェクトの動作

Objective -CランタイムリファレンスOBJC_ASSOCIATION_RETAIN_NONATOMIC連想オブジェクトの動作は、新しい値を割り当てて保持する前に、関連付けられたオブジェクトによって参照される古い値を呼び出しますか?release

0 投票する
1 に答える
2312 参照

objective-c - メソッドを動的に追加する

私はObj-cランタイムリファレンスにあるこのメソッドを試しています

次のような新しいメソッドを追加したいと思います。

これまで、C関数を作成しました。

今、私はする準備ができています:

しかし、success決して「はい」ではありません。私は、より単純な署名を持つメソッドで同じアプローチを試しましたが、うまくいきました。したがって、問題は最後のパラメータだと思います。"v@:@:@:"

この場合、新しいメソッドを機能させるには何を渡す必要がありますか?

0 投票する
1 に答える
550 参照

objective-c - ObjCで未定義のメッセージをキャッチし、それを別のシグネチャを持つメソッドに転送する

私はメソッドを使ってロガークラスを書いています(誰がしませんか?)

未定義のメッセージをこのメソッドに転送できるようにしたいと思います。例えば ​​:

より一般的には

私はresolveInstanceMethodメッセージ転送を見てきましたが、私が理解したことから、彼らはすべて、メソッドが同じ署名を持っていることを期待しています。

何か案が ?ありがとう !

0 投票する
3 に答える
813 参照

objective-c - Objection を使用すると、カスタム プロトコルの実装が認識されないセレクターでクラッシュする

カスタムプロトコルを定義しています:

さまざまなプロバイダを利用したい。1 つは Facebook プロバイダーです。

クラスからプロトコルにバインドするようにObjectionをセットアップします。

Global Injector をセットアップします。

私はこれを私の RootViewController で次のように使用しています:

これを実行すると、次のエラーが表示されます。

したがって、私のクラスはプロトコルを実装します。に正常に割り当てられましたid<NGSAuthProvider>Objection[[NGSFacebookAuthProvider alloc] init]を使用する代わりに明示的に構築しようとしましたが、それでもクラッシュしました。

メソッドを使用してセレクターをループして、objc/runtime.hそこにあるセレクターを確認しようとしましたが、見つかったのは次のinitializeとおりです。

これは、私が見逃している単純なものでなければなりません。Cocoa で定義されたプロトコルを使用していますが、この問題はありません。UIViewControllerベースのデリゲートのカスタム プロトコルを問題なく定義しました。

Obj-C ランタイムがメソッドを見つけられない理由がわかりません。明示的に変更id<NGSAuthProvider>NGSFacebookAuthProviderて構築すると、すべて機能します。

解決:

問題は、プロトコルにバインドする方法を誤解していたことです。機能する1つの方法は次のとおりです。

私がやりたいことは、クラスをプロトコルにバインドすることですが、Objection は呼び出す初期化子をおそらく知らないでしょうか?

0 投票する
1 に答える
4022 参照

objective-c - 引数isKindOfClass:[NSNumberクラス]-これをチェックする正しい方法は?

そのため、実行時までargのクラスタイプが不明なもので遊んでいました。このような:

これは明らかに私がやろうとしていることの不自然な例です。重要なのは、これは決して機能しないということです。「arg」のクラスは常にNSCFNumberとして表示され、それを確認する方法がわかりません。

配列内の任意の値が整数であるかどうかを検出する際の混乱を少なくする方法はありますか?


更新: @ chuck、@ omz、@NikitaLeonovにご協力いただきありがとうございます。私が最初にここに投稿したのは、私が抱えていた問題を単純化したものであり、最初に実行せずにここに記述しました。エラーを削除するために更新されたコード(以下を参照)は、実際には正常に実行されます。

私が問題を抱えていた実際のコードで犯した間違いも同様にばかげていました。配列のインデックスにある項目ではなく、配列を「doWhatever」に戻していたため、問題が発生していました。

助けてくれてありがとう、しかし私の質問は間違っていました。みんなの時間を無駄にしてすみません!

必要に応じて実行される修正されたコード:

0 投票する
1 に答える
1034 参照

objective-c - Objective-Cの@try-@ catch実装が実行時にどのように実行されるかの例?

Objective-Cの低レベルのランタイムヘッダー(/usr/include/objc)には、objc-exceptions.hファイルがあります。これは、ObjCコンパイラによって@try/がどのように実装されているかと思われます。@catch

「クラスに送信された認識されないセレクター」例外をキャッチするために、これらの関数を手動で呼び出そうとしています(ObjCランタイムと実装の実験用)。

したがって、基本的に、私が探しているのは、低レベルのランタイム関数を使用して@try/を実行する方法の例です。@catch前もって感謝します!

0 投票する
3 に答える
8699 参照

objective-c - Objective-C: Class インスタンスのスーパークラスを取得するための推奨される方法

Class変数のスーパークラスを取得するために、次の 2 つの方法のどちらが正しいか、または優先されるか疑問に思っています。

  1. Class getSuperclass(Class cls) { return [cls superclass]; }

  2. Class getSuperclass(Class cls) { return class_getSuperclass(cls); }