2013-07-30 42 views
2

在我的应用程序中,我试图从我的服务器上下载两个对象,一个'文章'和一个图像。 'article'对象(从sql-query翻译成NSObject的子类)具有指向下载图像的位置的指针,显然需要比文章查询更长的下载时间。当我“下载”这些文章时,它们最终会以NSArray的结尾。当他们是完整的,那么我通过数组迭代开始每个图像的异步下载,有点像这样:在'空'阵列的特定索引处插入对象

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

我使用的解析框架要做到这一点,那么该块可能会显得怪异那些没有使用它的人,所以我只会解释一下:在块中(当异步下载完成时),我将返回的NSData(图像)分配给另一个数组,名为articleImagesNSMutableArray,我想该数组中图像的索引与另一个文章的索引相对应;两个阵列中的相同年表。

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

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

+1

为什么不在你的'Article'类中添加'UIImage'类型的属性'image',然后在下载完成后将该属性设置为下载的图像? – s1m0n

+0

@ s1m0n因为这些文章是可编辑的,并且以后可以上传。使用当前的框架,这意味着当我保存并上传对象时,它将包含NSData,并使用两倍的空间。我敢肯定,我可以在解决方法中“禁用”上传图片,但我想这样做。我也一直在想这个。 – Sti

+0

固定大小的数组有空值吗?为什么不使用优质的普通c数组? – Nicolas

回答

5

另一个想法:

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

后来我用替换对象做articleImages一个NSMutableDictionary并使用图像索引 (或一些独特的文章ID)作为关键:

articleImages[@(index)] = imageData; 
1

您需要先将一些愚蠢的数据,然后将其替换。我认为没有其他办法可以做到这一点。

我以前也有过类似的情况,在这里我不喜欢的东西:

[_myArray replaceObjectAtIndex:index withObject:newObject]; 
相关问题