0

画像をダウンロードしてアプリのデータベースに保存するコードを実装していますが、

オブジェクトの配列があり、各オブジェクトには画像の URL とその他の情報が含まれています。画像をダウンロードするには、クラス ライブラリ AFImageRequestOperation.h AFNetworking を使用しています。

私のコードはデータをダウンロードしてデータベースに保存しますが、どの画像がダウンロードされるかをユーザーに通知する必要があります。は配列内にありますが、AFImageRequestOperation が非同期でダウンロードするため、アイテム 4 は最初のアイテムの前にダウンロードできます。

要するに、前のダウンロードが完了したときに、次のダウンロードのために制御して解放するだけです。

オブジェクトの配列を実行し、各位置の関数を呼び出す for があります。関数には次のコードがあります。

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[arrImagem valueForKey:@"urlimagem"]]];
    AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){

        Imagens *imagem = (Imagens *)[NSEntityDescription insertNewObjectForEntityForName:@"IMAGENS" inManagedObjectContext:managedObjectContext];

        // Save Image
        NSData *imageData = UIImageJPEGRepresentation(image, 90);
        [imagem setCategoria:cat];
        [imagem setTitulo:[arrImagem valueForKey:@"titulo"]];
        [imagem setDescricao:[arrImagem valueForKey:@"descricao"]];
        [imagem setImagem:imageData];



        NSError *error;
        if(![managedObjectContext save:&error]){
            NSLog(@"houve um erro muito grave");
            //return false;
        }else{
            NSLog(@"Salvou imagem");
        }

    }failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
        NSLog(@"%@", [error localizedDescription]);

    }];

    [operation start];

私の質問が非常に明確かどうかはわかりませんが、基本的に私の質問はこのリンクに似ています

4

3 に答える 3

0

私の問題を解決することができました。解決策の投稿が遅れて申し訳ありません。以下のコードに従ってください。

dispatch_group_t group = dispatch_group_create();

        dispatch_group_enter(group);

        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:strUrl]];

        AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){

            //your implementation        

            dispatch_group_leave(group);     //<== NOTICE THIS

        }failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
           //your implementation

            NSLog(@"%@", [error localizedDescription]);

        }];

        [operation start];

        dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

したがって、ダウンロードは順番に行われます。このコードがケース内にある場合、次のダウンロードはメソッド success^: または failure^: が呼び出されたときにのみ呼び出されます。

于 2013-05-17T20:44:10.423 に答える