編集:配列を初期化した直後に配列を手動で保持するための単一の呼び出しに固執し、それで修正されました。デュル。ありがとう。
UIScrollView サブクラスに NSMutableArray を保持し、UIImageView サブクラスのインスタンスをそれぞれサブビューとして追加します。最終的には配列内の順序を再配置する予定であるため、変更可能な配列である必要があります。このバグは、私がそうしようとする前に発生しています。NSLogs を使用して、AppDelegate で applicationDidBecomeActive: が呼び出されるまで、配列が 10 カウントであることを示し、実行ループで 0.001 秒ごとに起動するタイマーを追加しました。初めて起動すると、配列が見つかりません! 私は非常に混乱しており、これを何時間も追跡しようとしています.
タイマーは正常に動作しています (つまり、printCount: が配列にアクセスしない場合は問題ありません)。そこで配列にアクセスしようとすると、タイマーが壊れます。以下の printCount: への通常の呼び出しは機能しますが、タイマーが最初に起動したときに、printCount: へのこれら 2 つの呼び出しの間で何が起こっている可能性がありますか?
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSTimer *timer = [[NSTimer scheduledTimerWithTimeInterval:0.001f
target:[viewController view]
selector:@selector(printCount)
userInfo:nil
repeats:YES]
retain];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[viewController view] printCount];
}
私は、デバッガーを使用してプログラムを際限なくステップ実行してきました。配列はこの時点まで正しく、内容が変更された後でもそのメモリ アドレスは同じです。ただし、その後はオブジェクトしかありません。その 10 個の要素は、単一の UITouchData インスタンスに置き換えられます。どこから来たのかわからない。私のイベント処理メソッドはどれも、配列の再割り当てや変更を試みません。何がうまくいかないのでしょうか?私は完全に当惑しています。