問題タブ [nsinvocation]

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

ios - 引数の型は整数であることが期待されますが、代わりに id が取得されます

私は Objective-C の機能を使用しており、メソッドが受け取った引数のタイプforwardInvocation:を知る必要があります。私の例では、私はそれを渡していますが、代わりにそれを教えてくれます。簡単な例を次に示します。intgetArgumentTypeAtIndex:id

これが私がそれを呼び出す方法です:

タイプとしてではidなく、なぜ私が得られないのか考えていますか?int

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

ios - NSOperationQueue の複数の割り当てによってアプリがクラッシュする

NSOperationQueue を使用してサーバーから json の結果をロードして、テーブルビューを更新します

キューの追加:

読み込み結果:

このコードはうまく機能し、必要なものをロードしますが、結果を複数回ロードするとアプリがクラッシュします。同時に多くの操作が行われたために発生すると思います。アプリのクラッシュを防ぐには?

ログ:

スタックトレース:

0 投票する
2 に答える
376 参照

ios - NSUndoManager prepareWithInvocationTarget に引数を保持させる方法は?

NSUndoManager メソッド prepareWithInvocationTargetは引数を保持しません。Apple docs にはこれへのリンクはありませんが、プロファイラーで確認しましたが、そうではないと確信しています。これは、オブジェクトを削除して元に戻す準備をする場合は、自分で保持する必要があることを意味します (ごみ箱配列に割り当てて元のリンクを削除するなど)。この種の偽の削除は、特に古い取り消しを削除する必要がある場合に、多くの不必要な騒ぎを引き起こします。

ただし、NSInvocationは、 retainArguments メソッドを呼び出すことで引数を保持できます。NSUndoManager は prepareWithInvocationTarget に NSInvocation を使用するため、retainArguments を NSUndoManager に渡す方法である可能性があります。

問題は - どうやってそれを行うのですか?

0 投票する
2 に答える
1958 参照

ios - NSInvocation とメモリの問題

だから私は Java の世界から来たので、メモリ管理の問題を幸いなことに無知です。ほとんどの場合、ARC は私のお尻を救ってくれましたが、ここで私を困惑させたことがあります。基本的に、私はいくつかのものに NSInvocations を使用していますが、次のコード変更を行う前に、いくつかの厄介なメモリの問題に遭遇しました。これらの変更を行ってから、メモリ クラッシュはなくなりましたが、私は通常、理解できないコードを非常に恐れています。私はこれを正しく行っていますか?

前: あらゆる種類のメモリの問題:

後:メモリの問題はありませんが、これが正しいかどうかはわかりません:

編集:

以下の回答に基づいて追加したかったので、objc_msgSendを使用しました。

また、すべてのメモリの問題が解決され、見た目がはるかにシンプルになります。これに問題がある場合はコメントしてください。

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

objective-c - ブロックを非同期メソッドに渡す

このブロックを後で実行する非同期メソッドにブロックを渡しています。someMethod:success:failure: に渡す前にブロックをコピーしないと、アプリがクラッシュします。

someMethod:success:failure: に渡す前にブロックをコピーするのではなく、 forwardInvocation: でブロックをコピーする方法はありますか?

フローはsomeMethod:success:failure: -> forwardInvocation: -> httpGet:success:failure です

httpGet:success:failure: HTTP ステータス コードに応じて、成功または失敗のブロックを実行します。

完全なソース コードは、https ://github.com/priteshshah1983/BlocksWithNSInvocation にあります。

助けていただけますか?

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

objective-c - NSTimer と NSInvocation、タイマーが起動しない

最初に NSInvocation を作成します。これは、タイマーで呼び出したいメソッドにいくつかのパラメーターがあり、ここで設定するためです。

インデックス 0 と 1 はターゲットとセレクターであるため、引数を設定するときはインデックス 2 から開始するようにドキュメントに記載されています。

次に、タイマーの間隔を決定します。この場合、記事が公開されてから 60 分後にタイマーを呼び出しているので、間隔は60 - timeSincePubDate分単位です。これに 60 を掛けて、タイマーの間隔 (秒) にします。

次に、間隔を指定してタイマーを作成し、実行ループに追加します。私はこれをやったことがありませんが、簡単に思えます。本来のメソッドを呼び出さない理由がわかりません。