2012-06-01 69 views
0

我是一個計數plist文件中的值的問題,問題是if語句應該檢查值是否大於我的plist中的對象,然後停止移動到下一頁,這裏是我的代碼,但:問題與[陣列計數]

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: 
+2

'[NSArray count]'給出了數組中項目的數量,而不是最後一項的索引。 – Manuel

回答

5

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

的它崩潰的原因是,該計數會給出對象的數量,但是當訪問每個對象時,您從0開始,因此[數組數量] -1是最後一個索引。

3

變化

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

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

如果你有你的數組中的30個項目中,最大的接近指數是29,因爲第一個元素的索引0

1

你想:

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

因爲它從0開始,並且如果嘗試獲取等於計數的索引處的對象,它將讀取數組的末尾。