0

私は plist ファイルの値をカウントする際に問題があります。問題は、値が plist 内のオブジェクトよりも大きいかどうかを if ステートメントで確認し、次のページへの移動を停止する必要があることです。ここに私のコードがありますが:

    picturesDictionary = [NSDictionary dictionaryWithContentsOfFile:
                                    [[NSBundle mainBundle] pathForResource:@"images" ofType:@"plist"]];  
arrays = [picturesDictionary objectForKey:@"PhotosArray"];

    int photoCount =  [arrays count];


if ((photoNumber < 1) || (photoNumber > photoCount)) return nil;

controller = [BookController rotatableViewController];

PhotosInAlbum.image = [UIImage imageNamed:[arrays objectAtIndex:pageNumber]];

しかし、写真が最後のページに到達すると、アプリケーションがクラッシュし、デバッガー メッセージ:

'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (30) beyond bounds (30)'
*** First throw call stack:
4

3 に答える 3

5

試す

if ((pageNumber < 0) || (pageNumber > (photoCount-1))) return nil;

クラッシュする理由は、カウントがオブジェクトの数を与えるためですが、それぞれにアクセスするときは 0 から始まるため、[配列カウント]-1 が最後のインデックスです。

于 2012-06-01T12:45:40.840 に答える
3

変化する

 if ((pageNumber < 1) || (pageNumber > photoCount)) return nil;

 if ((pageNumber < 0) || (pageNumber >= photoCount)) return nil;

配列に30個のアイテムがある場合、最初の要素がインデックス0にあるため、アクセス可能な最大のインデックスは29です。

于 2012-06-01T12:46:21.417 に答える
1

あなたが欲しい:

if ((pageNumber < 0) || (pageNumber >= photoCount)) return nil;

0から始まり、countに等しいインデックスでオブジェクトを取得しようとすると、配列の終わりを超えて読み取られます。

于 2012-06-01T12:46:52.703 に答える