2016-12-25 1 views
1
NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:(id<NSURLSessionDelegate>)self delegateQueue:nil]; 

NSString *body = [[NSString alloc] initWithData:bodyData encoding:NSASCIIStringEncoding]; 
RMLog(@"RestManager:[%@]\nRequest URL = %@\nMethod = %@\nHeaders\n%@\nBody\n%@", keyPath, url.absoluteString, method, additionalHeaders, body); 


if (bodyData != nil && ([method isEqualToString:kMethodPost] || [method isEqualToString:kMethodPut])) { 
    NSURLSessionUploadTask *uploadTask = 
    [session uploadTaskWithRequest:request 
          fromData:bodyData 
       completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { 
        [self parseKeyPath:keyPath responseData:data reponse:response error:error completionHandler:completionHandler]; 
       }]; 
    [uploadTask resume]; 
} 

Ich versuche, Nsurlsession Delegat in NSObject Klasse aufrufen. Ich verwende diese Zeile NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:(id<NSURLSessionDelegate>)self delegateQueue:nil], aber Delegate-Methode wird nicht aufgerufen.Wie NSURLSession Delegate in NSObject-Klasse nicht in Viewcontroller aufgerufen?

Antwort

1

init Ihre NSObjectClass und legen Sie es als den Sessions Delegierten ...

NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:NSObjectClass delegateQueue:nil]; 

in NSObjectClass:

#import <Foundation/Foundation.h> 

@interface Object : NSObject <NSURLSessionDelegate, ...> 

@end 
0

Sie können wie unten

@interface ServerAPI : NSObject<NSURLSessionDelegate, NSURLSessionTaskDelegate> 
    -(void)startUploadTask; 
    @end 

    @implementation ServerAPI 
    -(void)startUploadTask{ 
     NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];// here you can use your own custom configuration 
     NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:(id<NSURLSessionDelegate>)self delegateQueue:nil]; 

     NSString *body = [[NSString alloc] initWithData:bodyData encoding:NSASCIIStringEncoding]; 
     RMLog(@"RestManager:[%@]\nRequest URL = %@\nMethod = %@\nHeaders\n%@\nBody\n%@", keyPath, url.absoluteString, method, additionalHeaders, body); 
     if (bodyData != nil && ([method isEqualToString:kMethodPost] || [method isEqualToString:kMethodPut])) { 
      NSURLSessionUploadTask *uploadTask = 
      [session uploadTaskWithRequest:request 
            fromData:bodyData 
         completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { 
          [self parseKeyPath:keyPath responseData:data reponse:response error:error completionHandler:completionHandler]; 
         }]; 
      [uploadTask resume]; 
     } 
    } 
    // Implement delegates method here 
    @end 
eine NSObject-Klasse erstellen

Und erstellen Sie die Instanz der ServerAPI-Klasse, wo immer Sie wollen, und rufen Sie die startUploadTask-Methode auf. Zum Beispiel:

ServerAPI *instance = [ServerAPI alloc] init]; 
[instance startUploadTask]; 
Verwandte Themen