通过AFNetworking将UIImage添加到指定索引处的NSMutableArray

时间:2013-02-27 04:08:23

标签: objective-c uiimageview uiimage nsmutablearray afnetworking

我正在使用我的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可变数组。

1 个答案:

答案 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: