AFMultipartFormData上传完成后运行方法

时间:2016-11-09 12:29:45

标签: ios objective-c afnetworking multipartform-data afnetworking-3

我使用AFMultipartFormData使用for循环一次向服务器发送多个图像以获取一个图像:

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString];
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];
    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]];
    NSError *error;
    NSString *mystring = @"noName";
//FOR Loop Start
    for(NSData *eachImage in dataStringArray) {

        NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:string parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

            [formData appendPartWithFormData:eachImage name:@"myImage"];
            [formData appendPartWithFormData:[mystring dataUsingEncoding:NSUTF8StringEncoding]
                                        name:@"FileName"];
        } error:&error];

        NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
            if (error) {
                NSLog(@"%@", error.localizedDescription);
                return;
            }

            [uploadedImageIDs addObject:[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]];

        }];
        [task resume];
    }//for end
        [self makeJSON:uploadedImageIDs];

但不知何故,它之前调用了makeJSON方法。因为有多个图像所以我需要它在所有图像的上传完成后调用。

1 个答案:

答案 0 :(得分:1)

网络处理将由异步运行,因此您需要计算网络completionHanlder以了解所有任务何时完成。喜欢这个

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString];
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];
    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]];
    NSError *error;
    NSString *mystring = @"noName";
    NSInteger count = 0;

//FOR Loop Start
    for(NSData *eachImage in dataStringArray) {

        NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:string parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

            [formData appendPartWithFormData:eachImage name:@"myImage"];
            [formData appendPartWithFormData:[mystring dataUsingEncoding:NSUTF8StringEncoding]
                                        name:@"FileName"];
        } error:&error];

        NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
            count++;

            if (error) {
                NSLog(@"%@", error.localizedDescription);
            } else {
                [uploadedImageIDs addObject:[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]];
            }

            if (count == dataStringArray.count) {
              [self makeJSON:uploadedImageIDs];
            }
        }];
        [task resume];
    }//for end