在我的应用程序中,我试图能够从我的服务器下载两个对象,一个“文章”和一个图像。 '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]
)虚拟数据,因为它们以随机顺序进入。但即使想到这一点,我也觉得很脏。必须有一个正确的方法来做到这一点?我不完全确定要搜索什么...
答案 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];