原因が見つからないという警告があります。
ドキュメント ベースの画像スライド ショーを実装する Cocoa プログラミングに関するテキストの説明コードに従っています。この警告により、プログラムがクラッシュする原因となる適切な回数を超えて while ループが実行されます。著者の Web サイトからダウンロードしたコードには、この問題はありません。
私のバージョンのタイプミスの単純な問題だと思いましたが、両方のバージョンのコードを注意深く読んでも、違いを見つけることができませんでした。次に、自分のバージョンのすべての .h、.m、.xib およびその他のリソース ファイルを作成者のバージョンに体系的に置き換え、すべてのターゲットを消去し、置換ごとに再構築しました。
ただし、最終的に .xcodeproj ファイルを作成者のバージョンに置き換えるまで、警告は消えません。その時点で、警告はクリアされ、コードはクラッシュすることなく実行されます。次に、作成者のバージョンの .h および .m ファイルのそれぞれを一度に私の .h および .m ファイルに置き換え、すべてのターゲットを消去し、ビルドして、再び警告やクラッシュが発生しないようにするという別の方法を試しました。.plist ファイルの設定ではないかと思いましたが、そのファイルの 2 つのバージョンを入れ替えても効果がないようです。.xcodeproj バンドルの project.pbxproj ファイルに絞り込むことができるようですが、そこにリストされているビルド設定のいずれかが問題を引き起こす可能性があることはわかりません。
誰かが問題に対する洞察を提供したり、デバッグ方法を推奨したりできれば幸いです。while ループを含む警告と関連するコード セグメントは次のとおりです。
ビルド警告:
SlideShowDocument.m: In function '-[SlideShowDocument removeSlidesAtIndexes:]':
SlideShowDocument.m:191: warning: comparison is always true due to limited range of data type
デバッガー コンソール出力:
Slide Master[665:a0f] HIToolbox: ignoring exception '*** -[NSCFArray objectAtIndex:]: index (4294967295) beyond bounds (3)' that raised inside
コード:
- (void)removeSlidesAtIndexes:(NSIndexSet*)indexes;
{
NSMutableArray *slideList = [NSMutableArray array];
unsigned int index = [indexes firstIndex];
while (index != NSNotFound) {
Slide *slide = [mSlides objectAtIndex:index];
[slideList addObject:slide];
index = [indexes indexGreaterThanIndex:index];
}
if ([slideList count]) {
//remove the slides from the master list
[self recordSlideChange];
[mSlides removeObjectsInArray:slideList];
[self notifySlidesChanged];
}
}