在我的应用程序中,我试图从我的服务器上下载两个对象,一个'文章'和一个图像。 'article'对象(从sql-query翻译成NSObject的子类)具有指向下载图像的位置的指针,显然需要比文章查询更长的下载时间。当我“下载”这些文章时,它们最终会以NSArray
的结尾。当他们是完整的,那么我通过数组迭代开始每个图像的异步下载,有点像这样:在'空'阵列的特定索引处插入对象
for(Article *a in articles)
{
NSString *url = a.imageURL;
//Start async download of this image
}
我使用的解析框架要做到这一点,那么该块可能会显得怪异那些没有使用它的人,所以我只会解释一下:在块中(当异步下载完成时),我将返回的NSData(图像)分配给另一个数组,名为articleImages
的NSMutableArray
,我想该数组中图像的索引与另一个文章的索引相对应;两个阵列中的相同年表。
现在,我这样做:[articleImages insertObject:data atIndex:i];
(其中i
来自for循环,没有真正使用上述的foreach),因为该块仍然是相同的for循环中。目前这个工作正在进行中,但到目前为止我只测试了三篇文章。如果我在这里没有完全错误,那么这是一个可怜的和有缺陷的方式,至于image2的下载速度比image1快,即使它稍后才开始。在这些情况下,我想我会偶然发现一个异常,说我不能在index:2
的空数组中插入对象。
我正在考虑用虚拟数据填充一个大小为[articles count]
的数组,并随后用随机顺序进入的下载图像替换正确索引(i
)虚拟数据。但即使想到这一点,我也觉得很肮脏。必须有一个正确的方法来做到这一点?我不完全确定搜索什么..
为什么不在你的'Article'类中添加'UIImage'类型的属性'image',然后在下载完成后将该属性设置为下载的图像? – s1m0n
@ s1m0n因为这些文章是可编辑的,并且以后可以上传。使用当前的框架,这意味着当我保存并上传对象时,它将包含NSData,并使用两倍的空间。我敢肯定,我可以在解决方法中“禁用”上传图片,但我想这样做。我也一直在想这个。 – Sti
固定大小的数组有空值吗?为什么不使用优质的普通c数组? – Nicolas