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:
4

3 回答 3

5

尝试

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

它崩溃的原因是,该计数将给出对象的数量,但是在访问每个对象时,您从 0 开始,因此 [array count]-1 是最后一个索引。

于 2012-06-01T12:45:40.840 回答
3

改变

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

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

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

于 2012-06-01T12:46:21.417 回答
1

你要:

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

由于它从 0 开始,并且如果您尝试在索引处获取对象等于计数,则它会读取数组末尾的内容。

于 2012-06-01T12:46:52.703 回答