So lade ich eine Aufgabe mit afnetworking im Hintergrund hoch

Ich versuche, große Dateien mit AFNetworking hochzuladen und den Upload fortzusetzen, wenn sich die Anwendung im Hintergrund befindet.

Ich kann problemlos Dateien hochladen, aber wenn ich versuche, eine Hintergrundkonfiguration zu verwenden, stürzt die Anwendung mit dem folgenden Stacktrace ab: Ausnahme: EXC_BAD_ACCESS (Code = 1, Adresse = 0x8000001f))

_CFStreamSetDispatchQueue
-[__NSCFBackgroundDataTask captureStream:]
__70-[__NSCFBackgroundDataTask _onqueue_needNewBodyStream:withCompletion:]_block_invoke_2
_dispatch_call_block_and_release
_dispatch_queue_drain
_dispatch_queue_invoke
_dispatch_root_queue_drain
_dispatch_worker_thread3
_pthread_wqthread

Hier ist ein Beispielcode:

Hinweis: Wenn ich @ benut[NSURLSessionConfiguration defaultSessionConfiguration] Der Upload ist erfolgreich, wird jedoch nicht fortgesetzt, wenn sich die Anwendung im Hintergrund befindet.[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.company.appname.uploadservice"] führt zum Absturz der Anwendung.

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[uploadBundle.uploadUrl absoluteString] parameters:[uploadBundle getParameters] constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    [formData appendPartWithFileURL:uploadBundle.fileDataUrl name:uploadBundle.fileName fileName:uploadBundle.fileName mimeType:uploadBundle.mimeType error:nil];
} error:nil];

Authentication *authentication = [Authentication getInstance];
[request addValue:authentication.token forHTTPHeaderField:@"token"];
[request addValue:authentication.authorization forHTTPHeaderField:@"Authorization"];

//NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.company.appname.uploadservice"];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSProgress *progress = nil;
_currentUploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"%@ %@", response, responseObject);
    }
}];

Antworten auf die Frage(4)

Ihre Antwort auf die Frage