我在计算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:
答案 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开始,如果你试图让索引处的对象等于计数,它就会读取数组的末尾。