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 ループを使用して、アップロードするファイルの正確なリストを設定NSMutableArrayまたは保持し、このリストを 1 つずつ調べることでした。NSMutableDictionariesこれは賢明な考えですか、それともより良い解決策がありますか? また、ファイルがアップロードされたら、foo ループで変更可能なディクショナリ内の値を更新する必要があることにも注意してください。アップロードが終了したら、特定の値を 0 に設定する必要があるという値 = "1" を確認します。

4

1 に答える 1

1

NSOperationQueueプロパティを 1に設定する場所を使用します。次に、既存のループにアップロードごとmaxConcurrentOperationCountに 1 つ追加します。NSOperation

辞書の値を更新するには、NSOperationオブジェクトに完了ブロックを追加します。完了ブロックはバックグラウンド スレッドで実行されるため、値を更新するときは必ず必要な同期を使用してください。

于 2013-02-16T15:08:10.103 に答える