2014-09-14 12 views
8

Ich möchte Dateien von meiner App auf meinen Server hochladen. Der folgende Code funktioniert hervorragend, wenn die App aktiv ist. Wenn ich die Home-Taste drücke oder eine andere App öffne, stoppt das Hochladen.AFNetworking Hintergrund Datei-Upload

Ich aktiviert Hintergrund holen, aber immer noch nicht funktioniert.

Afnetworking hat Hintergrund-Unterstützung, aber ich kann nicht herausfinden, wie ich diese Funktion zu meinem Code implementieren.

NSString *str=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Archive.zip"]; 
NSDictionary *parameters = @{@"foo": @"bar"}; 
    NSURL *filePath = [NSURL fileURLWithPath:str]; 
    AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer]; 

    NSData *imageData=[NSData dataWithContentsOfURL:filePath]; 


    NSMutableURLRequest *request = 
    [serializer multipartFormRequestWithMethod:@"POST" URLString:@"http://url" 
            parameters:parameters 
        constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
         [formData appendPartWithFileData:imageData 
                name:@"image" 
               fileName:@"Archive.zip" 
               mimeType:@"application/zip"]; 
        }]; 


    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
    AFHTTPRequestOperation *operation = 
    [manager HTTPRequestOperationWithRequest:request 
            success:^(AFHTTPRequestOperation *operation, id responseObject) { 
             NSLog(@"Success %@", responseObject); 
            } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
             NSLog(@"Failure %@", error.description); 
            }]; 


    [operation setUploadProgressBlock:^(NSUInteger __unused bytesWritten, 
             long long totalBytesWritten, 
             long long totalBytesExpectedToWrite) { 
     NSLog(@"Wrote %lld/%lld", totalBytesWritten, totalBytesExpectedToWrite); 
    }]; 


    [operation start]; 
+0

waren Sie in der Lage, eine Lösung für dieses Problem zu finden ? –

+0

Von Apple NSURLSession Dokument, unterstützt Hintergrundübertragung nur Upload und Download-Aufgaben (keine Datenaufgaben) mit einer Datei-URL, nach Ihrem Code scheint es, Sie verwenden NSData-Upload. – vnaren001

Antwort

6

Ändern Sie diese Zeile

[operation start]; 

dieser

[operation setShouldExecuteAsBackgroundTaskWithExpirationHandler:^{ 
     // Handle iOS shutting you down (possibly make a note of where you 
     // stopped so you can resume later) 
    }]; 


    [manager.operationQueue addOperation:operation]; 

Sie unter den folgenden Links sehen können AFHTTPRequestOperation doesn't work after stand by mode und Alternative for enqueueHTTPRequestOperation in AFNetworking 2.0

+5

Es stoppt nach ein paar Minuten, wenn App nicht aktiv ist. – amone

+0

@charty: bedeutet, wenn die App für iOS gesperrt ist? – BaSha