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

相關問題