質問

私には非常にシンプルなラインのコードをObjective-C:

if ((selectedEntity != nil) && [selectedEntity isKindOfClass:[MobileEntity class]])

時には、たえしましたが、ゲームの衝突によるこのコードは、現在、お持ちの家庭用ゲーム機だけでなくアクセスいつもの時に何かが削除されからの活躍の場は、私の推測う のselectedEntityがdeallocいします。のみならず、不可能を選択し撤退を主体がせんかではないが、実際はそう私のコー---、いい具体的にはチェックがきていることを確認して下さい a selectedEntityり前のようにアクセスでるんることは問題です。Objective-Cでの支援Boolean短citcuitingができない編集:ような短絡なしの問題です。

もっち@み/@チ周辺のこのコードブロックからであることを知っていて爆発するかですが、それは無視することによって推測EXC-貸-アクセスできなかったのですが、追いつかれて).

のではないでしょうかんださんのいずれかを知る方法できること定められているので注意が必要で(どうでもいいんこのエラーではないので、ゲームクラッシュ)または説明できなぜこの部品が追加されています。知っていObjective-Cは変なことをやりつづけているので"ゼロ"値だけでは推測もつかスペースはオブジェクトのポインタまたは無料。

編集:で明らかに私は、以下のコードが間違っているのは、こうした推測で起きていることについての私のプログラム。たばこの問題である。:-)

編集:ようになり、フリンジの場合ことで、選択されている企業になる前消去されます。これは、進行のコードは以下のようになります。

selectedEntity = obj;
NSAutoreleasePool *pool = ...;
[obj release];
if (selectedEntity != nil && etc...) {}
[pool release];

んを推測するためのAutoreleaseプールはいまだに公表されていない、オブジェクトはnilが保持カウントが0でない可することを目的とするもので...。ちです。

また、私のゲームは単一のネジ付きで、こなスレッドの問題です。

編集:私は固定の問題には二つの方法があります。第んじて選択できるように体にフリンジ。第二に、の代わりに呼び出すだけで、その[主体removeObjectAtIndex:i]のコードを削除する事業体を削除、変更いたしました

//Deselect it if it has been selected.
if (entity == selectedEntity)
{
    selectedEntity = nil;
}

[entities removeObjectAtIndex:i];

っていることを確認してください割り当nilの変数を同時に発売しましたので、ジブされています。

役に立ちましたか?

解決

場合にはオブジェクト(selectedEntity)を公開し、deallocいのではない==無料。このポインタを任意のメモリdeferencingい場合(selectedEntity!=nil)プログラミングエラー(EXC_BAD_ACCESS).

そのための共通obj-cパラダイム-

[selectedEntityリリース];selectedEntity=nil;

他のヒント

こんまりとした短絡.Objective-Cを食べてメッセージがnilので、チェック selectedEntity != nil 必要な以降のメッセージをnilが返さないためBOOL戻し)が必要です。

EXC_BAD_ACCESSではないcatchableます。では最悪の事故により生じるい無効なポインタです。

により、どんなオブジェクトselectedEntityポイントの公表を前にコードが実行されます。このように、これはnilも有効なオブジェクトです。

On NSZombiesしてから接続し直してください。

例えばシェアする画面でユーザーがネジ付き、ご同期selectedEntity全体のスレッドを適切に(この長diddlingのUIからの二次スレッドが対応していない)?


投稿編集したことを示すための修正は:

//Deselect it if it has been selected.
if (entity == selectedEntity)
{
    selectedEntity = nil;
}

[entities removeObjectAtIndex:i];

この修正の問題がNSMutableArrayお支払いは現金のみとなりますリリース物に除去している。場合、保持カウントがゼロのオブジェクトが割とselectedEntityそうした点を割オブジェクトです。

んこ http://developer.apple.com/mac/library/qa/qa2004/qa1367.html このエラーのある結果以上のオブジェクトです。こaltough selectedEntityはnillまで多くの回りがすべて揃っていないお使う..

けにブレークポイントOBJC_EXCEPTION_THROW見によってスローされます。がなされEXC_BAD_ACCESSいます。

まうという内の場合はブロックの原因となる例外?

 

selectedEntity = obj;
NSAutoreleasePool *pool = ...;
[obj release];
if (selectedEntity != nil && etc...) {}
[pool release];

 

いぶポインタまたはゾンビです。のselectedEntityが差しでobjくリリース直前に参照すselectedEntity.このselectedEntity非nilが無効なオブジェクトで逆参照のです。

またautoreleaseにobjよりもリリースします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top