0

我正在使用 cellForRowAtIndexPath 中的以下代码从 Web 服务中获取图像:

[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 可变数组。

4

1 回答 1

0

index您传递给的必须insertObject:atIndex:小于或等于当前已添加到数组中的对象数。您不能像您正在做的那样在数组中的随机位置插入对象。

当您分配一个可变数组时,即使具有设定的容量,该数组也是空的。从空数组开始,您唯一的选择是调用addObject:insertObject:atIndex:使用索引 0 调用。除 0 以外的任何值(假设数组为空)都会导致异常。

如果您需要在随机位置插入对象,则必须首先用一组虚拟对象(例如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:而不是insertObject:atIndex:.

于 2013-02-27T04:34:23.480 回答