[数组计数]问题

时间:2012-06-01 12:43:37

标签: objective-c ios cocoa-touch

我在计算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:

3 个答案:

答案 0 :(得分:5)

尝试

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

它崩溃的原因是,该计数将给出对象的数量,但是当访问每个对象时,你从0开始,所以[数组计数] -1是最后一个索引。

答案 1 :(得分:3)

更改

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

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

如果数组中有30个项目,则最大可访问索引为29,因为第一个元素位于索引0处。

答案 2 :(得分:1)

你想:

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

因为它从0开始,如果你试图让索引处的对象等于计数,它就会读取数组的末尾。