2013-02-16 38 views
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"]); 
     } 
    } 
} 

我的想法是用这个循环来填充NSMutableArrayNSMutableDictionaries拿着文件的确切名单上传,然后走线槽这个名单逐一。这是一个明智的想法还是有更好的解决方案?另外请记住,一旦文件上传,我必须在foor循环中更新mutable字典中的值。在上传完成后,检查值为“1”的特定值必须设置为0。

+0

我也是一个初学者,但如果这是唯一的方法,你可以回顾正确的顺序,我会去相同的解决方案。但让我们等待一些专家.. :) – sharkyenergy 2013-02-16 15:02:27

+0

你使用了很多我不知道意义的变量。 – 2013-02-16 15:08:06

回答

1

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

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

+0

谢谢!以及我如何编辑从'1'到'0'的值? (从该行:'如果([[的NSString stringWithFormat:@ “%@”,[d valueForKey:[αvalueForKey:@ “机构”]]] isEqualToString:@ “1”]) ')通过使用与所述阵列字典我会有我需要将该值设置为0的信息,但是NSOperationQueue呢? – sharkyenergy 2013-02-16 15:28:50

相关问题