我正在使用我的cellForRowAtIndexPath中的以下代码从网络服务中获取图片:
[cell.posterImageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[postersURLArray objectAtIndex:indexPath.row]]] placeholderImage:[UIImage imageNamed:@"placeholder.png"]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
{
if (request)
{
[UIView transitionWithView:cell.posterImageView
duration:1.0f
options:UIViewAnimationOptionTransitionCurlUp
animations:^{[cell.posterImageView setImage:image];}
completion:nil];
posterImageView.tag = indexPath.row;
posterImageView.image = image;
[myImage insertObject:posterImageView atIndex:posterImageView.tag];
}
else
{
NSLog(@"Cached");
}
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
{
NSLog(@"Failed to fetch poster.");
}];
但它总是会产生错误。我已经分配了myImage可变数组。
答案 0 :(得分:0)
传递给index
的{{1}}必须小于或等于已添加到阵列的当前对象数。您无法像在行中那样在数组中的随机位置插入对象。
分配可变数组时,即使设置容量,该数组也为空。从空数组开始,您唯一的选择是调用insertObject:atIndex:
或调用addObject:
,索引为0.除0之外的任何值(假设数组为空)都将导致异常。
如果需要在随机位置插入对象,则必须首先使用一定数量的虚拟对象填充数组,例如insertObject:atIndex:
个实例。这要求您知道最大数组大小。
NSNull
现在,只要索引小于NSUInteger maxSize = ... // some known maximum number of images
NSMutableArray *myImage = [NSMutableArray arrayWithCapacity:maxSize];
for (NSUInteger i = 0; i < maxSize; i++) {
[myImage addObject:[NSNull null]];
}
,您就可以在随机位置插入图像。但现在您必须使用maxSize
代替replaceObjectAtIndex:withObject:
。