【问题标题】:Insert object at specific index in 'empty' array [duplicate]在“空”数组中的特定索引处插入对象[重复]
【发布时间】:2013-07-30 18:51:07
【问题描述】:

在我的应用程序中,我试图从我的服务器下载两个对象,一个“文章”和一个图像。 'article'-object(从 sql-query 转换为 NSObject 的子类)有一个指向下载图像的位置的指针,这显然比 article-query 需要更长的下载时间。当我“下载”这些文章时,它们最终会出现在 NSArray 中。完成后,我将遍历数组以开始异步下载每个图像,如下所示:

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

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

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

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

【问题讨论】:

  • 为什么不直接将UIImage 类型的属性image 添加到Article 类中,然后在下载完成后将此属性设置为下载的图像?
  • @s1m0n 因为文章是可编辑的,以后可以上传。使用当前的框架,这意味着当我保存和上传对象时,它将包含 NSData,并使用双倍的空间。我敢肯定,我可以在解决方法中“禁用”要上传的图像,但我想这样做。我也一直想知道这一点..
  • 具有空值的固定大小数组?为什么不使用好的老式纯 c 数组?

标签: ios objective-c asynchronous nsmutablearray nsarray


【解决方案1】:

另一个想法:将articleImages 设为NSMutableDictionary 并使用图像索引 (或一些唯一的文章 ID)作为键:

articleImages[@(index)] = imageData;

【讨论】:

    【解决方案2】:

    你需要先放一些虚拟数据然后替换它。我认为没有其他方法可以做到这一点。

    我之前也遇到过类似的情况,我做了类似的事情:

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

    后来我用以下方法替换了对象:

    [_myArray replaceObjectAtIndex:index withObject:newObject];
    

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2022-01-25
      • 2019-11-20
      • 2017-11-08
      相关资源
      最近更新 更多