1

以下のようなコールスタックのクラッシュレポートがあります。バグを再現することはできないので、何が起こっているのかを推測する必要があります。

NSInvalidArgumentException
---------------------
-[__NSBlockVariable__ profile_data]: unrecognized selector sent to instance 0xab2f620
---------------------
0 CoreFoundation 0x378688a7 __exceptionPreprocess + 186
1 libobjc.A.dylib 0x35d6e259 objc_exception_throw + 32
2 CoreFoundation 0x3786ba9b -[NSObject doesNotRecognizeSelector:] + 174
3 CoreFoundation 0x3786a915 ___forwarding___ + 300
4 CoreFoundation 0x377c5650 _CF_forwarding_prep_0 + 48
5 TouchPalDialer 0x0005096f -[InfoEditViewControllerNew textFieldDidEndEditing:] + 134

クラッシュをスローするコードは次のようになります

profile_data_manager.profile_data.name = [textField.text stringByTrimmingCharactersInSet:whitespace];

profile_data_manager は、確実にクラス タイプ ProfileDataManager であり、property@property(nonatomic、retain) ProfileModel *profile_data; を持っています。

なぜ profile_data_manager がNSBlockVariableになったのか、なぜ profile_data を認識しないのかわかりません。

Calling delegate method, unrecognized selector because sent to wrong object という投稿を見ました。

私のクラッシュが同じ理由であるかどうかはわかりません。誰かが NSBlockVariable について説明しているリソースを見せてくれれば、その理由をよりよく理解できると思います。

ありがとう!

4

2 に答える 2

0

あなたのオブジェクトはARCによって解放される準備ができているからです。解決するには、必ずグローバル変数に変数を入れてください。そのため、親オブジェクトが解放されたときにのみ解放されます。

于 2013-07-10T04:02:46.043 に答える
0

プロジェクトで ARC を使用していますか? 私はそうではないと仮定しています。リリースしすぎていないことを確認してくださいprofile_data_manager

私の経験では、このタイプのエラーは、オブジェクトが時期尚早に解放され、そのメモリが新しいオブジェクトのインスタンスを保持するために再利用されたことを意味します。この場合、 のインスタンスですNSBlockVariable

プロジェクトで Analyze ビルドを実行して、可能性のある refcount (保持/解放) エラーを探すことができます。

ゾンビをオンにしてプロジェクトを実行することもできます... (Instruments の割り当てインストゥルメントを参照し、ゾンビ オプションを有効にします)。これにより、参照カウントのバグを追跡できます。(これrefcount のバグであると仮定します)...しかし、それは可能性が高いようです。

于 2012-09-10T09:08:59.270 に答える