在'empty'数组中的特定索引处插入对象

时间:2013-07-30 18:51:08

标签: ios objective-c asynchronous nsmutablearray nsarray

在我的应用程序中,我试图能够从我的服务器下载两个对象,一个“文章”和一个图像。 'article'对象(从sql-query翻译成NSObject的子类)有一个指向下载图像的指针,显然需要比文章查询更长的下载时间。当我'下载'这些文章时,它们会以NSArray结尾。当它们完成后,我将遍历数组以启动每个图像的异步下载,如下所示:

for(Article *a in articles)
{
    NSString *url = a.imageURL;
    //Start async download of this image
}

我正在使用Parse Framework来执行此操作,因此对于没有使用它的人来说块可能看起来很奇怪,所以我只是解释一下:在块中(当异步下载完成时),我我将返回的NSData(图像)分配给另一个名为NSMutableArray的{​​{1}}数组,并且我希望此数组中的图像索引对应于另一个中的文章索引;两个数组都有相同的年代表。

现在,我正在这样做:articleImages(其中[articleImages insertObject:data atIndex:i];来自for循环,而不是真正使用foreach,因为该块仍在同一个for循环中。这是现在的工作,但到目前为止我只测试了三篇文章。如果我在这里并没有完全错误,那么这是一个糟糕而有缺陷的方法,就像image2下载速度比image1更快的情况,即使它稍后开始。在这些情况下,我想我会偶然发现一个异常,说我不能在i处插入一个空数组中的对象。

我正在考虑使用大小为index:2的伪数据填充数组,然后将下载的图像替换为正确索引([articles count])虚拟数据,因为它们以随机顺序进入。但即使想到这一点,我也觉得很脏。必须有一个正确的方法来做到这一点?我不完全确定要搜索什么...

2 个答案:

答案 0 :(得分:5)

另一个想法:让articleImages成为NSMutableDictionary并使用图片索引 (或一些独特的文章ID)作为关键:

articleImages[@(index)] = imageData;

答案 1 :(得分:1)

您需要先放入一些笨重的数据然后替换它。我认为没有其他办法可以做到这一点。

之前我有类似的情况,我做过类似的事情:

- (void)initiateArray:(int)count
{
   _myArray = [[NSMutableArray aloc] init];
   for (int loop = 0; loop < count; loop++)
   {
      [_myArray addObject:[NSNull null]];
   }
}

后来我使用:

替换了对象
[_myArray replaceObjectAtIndex:index withObject:newObject];