2016-12-25 62 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]; 
} 

我想在NSObject类中调用Nsurlsession委托。我正在使用这一行NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:(id<NSURLSessionDelegate>)self delegateQueue:nil],但不调用委托方法。如何在NSObject类中调用NSURLSession委托不在viewcontroller中?

回答

1

初始化您NSObjectClass并将其设置为会议代表...

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

#import <Foundation/Foundation.h> 

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

@end 
0

您可以创建一个NSObject类,如下

@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 

然后创建ServerAPI类的实例,并调用startUploadTask方法。例如:

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