如何在NSObject类中调用NSURLSession委托不在viewcontroller中?
问题描述:
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中?
答
初始化您NSObjectClass并将其设置为会议代表...
NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:NSObjectClass delegateQueue:nil];
在NSObjectClass
:
#import <Foundation/Foundation.h>
@interface Object : NSObject <NSURLSessionDelegate, ...>
@end
答
您可以创建一个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];