1

私は周りにたくさんの答えを見てきましたが、私の問題の解決策を見つけることができませんでした。

私は基本的にクラスメソッドのみを使用するクラスを持っています。このクラスを割り当てることはありません。だから、私はそれにブロックを渡し、次のようにクラスの.hのスタティックに保存しています:

static ErrorBlock _errorBlock;

私はこのように保存しています:

_errorBlock = [errorBlock copy];

errorBlockメソッドのパラメータとして受け取ります。いくつかの計算の後、次のようにブロックを呼び出します。

   _errorBlock(error);

私はこれをクラスのカテゴリーから呼び出していると言う価値があります。アプリケーションは基本的に次を返します。

EXC_BAD_ACCESSS(code=2, adress = 0xc)

_errorBlock値を確認するとnil。だから私の質問は、どうすればブロックへのライブ参照を維持できますか?

4

2 に答える 2

0

_errorBlockが"nil"の場合、nilが割り当てられており、存続させるための参照がないと言っても差し支えないでしょう。のように参照を作成しNSObject *reference = someObject、someObjectが解放された場合でも、参照ポインターは、someObjectが以前存在していた場所を指し、nilであってはなりません。ブロックの割り当てに問題があるかどうか、またはブロックが呼び出されるかどうかを確認します。また、呼び出す前に_errorBlockが存在するかどうかを確認することもできます。

于 2012-11-05T15:36:28.517 に答える
0

グローバルブロックの使用を完全に削除して、それを解決することができました。現時点では、ブロックを使用して、それらをパラメーターとして渡します。

于 2012-11-12T13:45:22.893 に答える