問題タブ [swizzling]

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 投票する
5 に答える
225 参照

c++ - int を使用した C++ テンプレート配列 operator[]

特別な構造体を操作しようとしていますが、ある種のスウィズル演算子が必要です。このため、オーバーロードされた配列演算子を使用することは理にかなっています[]が、構造体の特定の仕様により理論的な回避策が可能になるため、分岐はしたくありません。

現在、構造体は次のようになっています。

ブランチを回避するにはどうすればよいですか? 私の考えでは、整数パラメーターを持つテンプレートを使用して特殊化を定義することですが、それが理にかなっているかどうか、およびそのモンスターの構文がどのように見えるかは明らかではありません。

私は明示的に、いかなる状況下でも、float[4]配列を使用して 2 つをマージすることはできません (また、ユニオン トリックはありません)。その正当な理由が必要な場合は、float[2]実際には、プラットフォーム固有の PowerPC ペア シングルに似ているためです。通常の Windows コンパイラはペアのシングルでは動作しません。そのため、コードをfloat[2]s に置き換えました。

GreenHills コンパイラを使用すると、次のアセンブリ出力が得られます (分岐が発生していることを示唆しています)。

そのスニペットに対応する C++ コードは次のようになります。

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

ios - 大規模なアプリですべての UILabel のフォントを変更する

これはあなたにとって興味深い問題です:

現在、100,000 行以上のコードと 100 近くの XIB ファイルで構成されるアプリ全体のスキンを変更中です。新しいデザインでは、アプリ内の (ほぼ) すべてのラベルに新しいカスタム フォントを使用する必要がありますが、古いアプリでは Helvetica Neue のデフォルト フォントが使用されます。

できるだけ多くの UILabels を変更する最も効率的な方法は何ですか? コードと XIB の両方で何千ものラベルを手動で変更する必要はありません (非システム フォントを使用しているため、これは特に困難です)。

UILabel の作成方法のスウィズリングをデフォルトで新しいカスタム フォントを使用することについて説明しました。これにより、Helvetica Neue に残るいくつかのラベルを作成後にカスタマイズすることができます。

考え?

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

objective-c - メソッド IMP 間で va_list を渡すには? (目的c)

関数をスウィズルして、関数の引数を使用して元の実装を呼び出そうとしています。新しい IMP の形式は次のとおりです。

args含まれていないのに _cmd が含まれているため、これは明らかに間違って...います。

...originalImpに渡すにはどうすればよいですか?

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

ios - iOS 静的ライブラリが機能しない

この記事の手順に従って、静的ライブラリを作成しました。

http://developer.apple.com/library/ios/#technotes/iOSStaticLibraries/Articles/creating.html

iPhoneシミュレーターターゲット用に作成しました。正常にビルドされた後、それを使用したい新しいプロジェクトにインポートしました。正常にインポートされ、問題はありませんが、ライブラリが機能しません。私が呼び出しているライブラリ メソッドはありません。ライブラリの目的は、UIViewController が表示されるたびにコードの一部が実行されるように、UIViewController の viewDidAppear メソッドを入れ替えることです。私のライブラリが「Link Binary With Libraries」ビルドフェーズに含まれているにもかかわらず、このコードは呼び出されません。

生の .m および .h ソース ファイルをライブラリとしてではなくインポートすると、すべて正常に動作するため、コード自体に問題がないことはわかっています。

0 投票する
6 に答える
11348 参照

ios - 必要なデバイスから「nil オブジェクトを挿入しようとする試み」をキャッチする方法に関するアドバイス

これが状況です:Hockeyappとtestflightは時々私について不平を言います

「nil オブジェクトを挿入しようとしています」

変更可能な辞書/配列で。私は正しいことは常に nil をチェックすることであり、それが理にかなっているときはそうする..私たちのテスターはそれらのクラッシュをキャッチすることはできませんが、AppStore ユーザーは明らかにできる.

私の推測では、サーバーが返すべきではないときに NSNull を返すことがあります。したがって、巨大なプロジェクトのどこにでも nil のチェックを挿入しないように、テスター用に別のターゲットを作成し、コレクション クラスにメソッド スウィズリングを使用するというのが私の考えでした。オブジェクトが実際にnilinsertObject:atIndexswizzled_insertObject:atIndex場合、クラッシュする前に説明的なレポートをログに記録/表示します。

__NSPlaceholderDictionary問題は、または__NSArrayM (プライベート クラスでカテゴリを作成できないという理由だけで) にスウィズリングを使用できないことです。

基本的には、これらの厄介なまれなクラッシュを検出する方法についてアドバイスを求めています。私が念頭に置いている解決策の 1 つは、try-catch ブロックを使用することです。Objective-c ではそれらが高価であることはわかっているため、本番環境では使用せず、テスターのみに使用します。try-catcheただし、 -s で囲まれたメソッドは、 #ifdef-- s で囲まれ#endifており、コードの可読性がすべて失われます。だから私はよりエレガントなソリューションを探しています。ありがとう。

更新: スタック トレースは残念ながらあまり説明的ではありません。

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

ios - iOS - EXC_BAD_ACCESS コード = 1 (メソッド スウィズリング) init 後に UIWebView がクラッシュする

アプリをARCに切り替えました。Xcode が提供するリファクタリング ツールのおかげで、移行は部分的に成功しました。動作しない部分は奇妙なエラーです。

メソッドの入れ替え (method_exchangeImplementations) を使用して、UIView の initWithFrame を呼び出す代わりに、myInitWithFrame コードを呼び出すようにしました。リファクタリング プロセスで myInitWithFrame のメソッド宣言でエラーが発生したため、メソッドの宣言の後に__属性__ ((objc_method_family(init))) を追加しました。現在、これはすべて iOS 6.0 以降では完全に正常に機能しますが、iOS 5.0 (サポートしたい最も低い iOS) では機能しません。EXC_BAD_ACCESS (コード = 1、アドレス = 0X28) を取得しています。実行するたびに、まったく同じメモリアドレスが表示されます。

私はそれを呼び出すUIWebViewを持っています:

myInitWithFrame が初期化を行った後、self を返し、クラッシュします。スレッド トレースでは、以下に示すように、[UIWebView 保持] メソッドのリンゴのコード (メソッドはグレー表示) でクラッシュすることが示されています。

画像を投稿するのに十分な担当者がいません。

同じコードが iOS 6.0 では機能するのに、iOS 5.0 では機能しない理由はありますか?

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

ios - メソッド スウィズリングの実装が行われていない

私はスウィズリングの概念を学ぼうとしています。

を追加しましmethod_exchangeImplementationsたが、まだメソッドが入れ替わっていません。私がどこで間違っているのかについて何か考えはありますか?

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

ios - UIResponder の Swizzling Copy メソッド

UIResponder の Copy: と Paste: メソッドをいじっています。コピーしたコンテンツをプライベート ペーストボードに書き込む必要があります。

コピーした文字列をペーストボードに書き込むにはどうすればよいですか。私が取得しているパラメータはタイプidです。NSStringに変換すると、このメソッド(UIMenuController)を呼び出しているのは送信者なので適切ではありません。