私は(あなたが思っていることを知っていると思う)... EXC_BAD_ACCESS
の質問はありませんが、私は本当に苦労しています。私は高いと低いすべてのネットとここで検索し、私が直面している問題は私のメモリ管理と関係があるようだ。NSMutableArrayアクセスの問題
問題:
基本的に私はいくつかのサイバー食品を追跡NSMutableArray
を持っています。同時に食品を追加したり取り除いたりすることができるので、取り出したい品物を確認し、がないものを持っている別の配列を持っています。を取り出す必要があります。つまり、元の配列(_food)を消去し、一時配列(foodToKeep)に保存されているすべての項目をコピーし直すことです。コードは次のとおりです
NSMutableArray *foodToKeep = [[NSMutableArray alloc] init];
for (Food *food in _food) {
if(!food.removeable){
[foodToKeep addObject:food];
[food release];
}
}
if(foodToKeep > 0){
[_food removeAllObjects];
for (Food *food in foodToKeep) {
[_food addObject:food]; // EXC_BAD_ACCESS error here
[food release];
}
}
}
[foodToKeep release];
元の配列に食品を追加すると、不正なアクセスエラーが発生します。その周りを検索した後、_food
の配列がどこかでリリースされているか、何らかの形でnilとして終了しているようです。私がrelease
を_foodに持っている唯一の場所は、dealloc
メソッドにあるので、なぜこれが起こっているのか理解できません。
私はObjective-Cをかなり新しくしています(私には簡単に行くことができます)が、漏れや偶発的なリリースがない限り、私はエキスパートアイが必要だと思う最も可能性が高い私の部分に些細な間違いが何であるかを確認してください:-P
編集: 食品が定義されており、ここに割り当てられている:クラスで
@interface MainLayer
{
NSMutableArray *_food;
}
init
方法
_food = [[NSMutableArray alloc] init];
ここでは_foodが定義されています。コード – Shubhank
を与える@Shubhankは質問を修正しました:) – Peter
あなたの2番目のfor ... in句は不要です。代わりに '[_food addObjectsFromArray:foodToKeep];'を使用することができます; – bneely