0

我使用以下代码来检索文件的上传顺序。文件必须按此特定顺序上传,不能同时上传。因此,我不能将我的代码放在这个 for 循环中,因为它会挂起线程。

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES];
NSArray *sortedArray = [agenciescontroller.arrangedObjects sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

for (NSManagedObject *a in sortedArray)
{
    for (NSMutableDictionary *d in imagescontroller.arrangedObjects)
    {
        if ([[NSString stringWithFormat:@"%@",[d valueForKey:[a valueForKey:@"agency"]]] isEqualToString: @"1"])
        {

            ///////////////////////////UPLOAD FILES HERE/////////////////////////////
            checkedchecks += 1;
            NSLog(@"Uploading %@ to %@", [d valueForKey:@"filename"], [a valueForKey:@"agency"]);
        }
    }
}

我的想法是使用这个 for 循环来填充NSMutableArrayNSMutableDictionaries保存要上传的文件的精确列表,然后一个一个地浏览这个列表。这是一个明智的想法还是有更好的解决方案?还要记住,一旦文件被上传,我必须在 foo 循环中更新可变字典中的值。我在哪里检查值 =“1”,一旦上传完成,特定值必须设置为 0。

4

1 回答 1

1

使用NSOperationQueue您将属性设置为 1 的位置。然后在现有循环中为每次上传maxConcurrentOperationCount添加一个。NSOperation

要更新字典中的值,您可以向NSOperation对象添加完成块。只需确保在更新值时使用必要的同步,因为完成块将在某个后台线程上运行。

于 2013-02-16T15:08:10.103 回答