iOS 9:从框架中的NSURLSessionDataTask获取值
我有一个iOS框架,它使用iOS 9:从框架中的NSURLSessionDataTask获取值,ios,objective-c,iphone,xcode,ios9,Ios,Objective C,Iphone,Xcode,Ios9,我有一个iOS框架,它使用NSURLSessionDataTask将JSON发送到服务器,如下所示: NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSHTTPURLResponse* httpResponse = (NSHTTPUR
NSURLSessionDataTask
将JSON
发送到服务器,如下所示:
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
int responseStatusCode = [httpResponse statusCode];
if (responseStatusCode == 200)
{
dispatch_async(dispatch_get_main_queue(), ^{
[self.delegate onJsonHttpResult:data andStatusResponse:responseStatusCode];
});
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
[self.delegate onJsonHttpResult:nil andStatusResponse:responseStatusCode];
});
}
}];
[postDataTask resume];
但每当我运行它时,[self.delegate onJsonHttpResult:nil和statusresponse:responseStatusCode]代码>未调用
当NSURLSessionDataTask在框架内运行时,是否有任何方法可以在其外部获取值
谢谢我的建议是创建并使用带有completionBlock的APIHelperClass
。
按照我的观点,这将比使用自定义委托更简单、更有效
要创建它,您可以执行以下操作:
在APIHelperClass.h中
#import <Foundation/Foundation.h>
@interface APIHelperClass : NSObject
+(void)apiCallSharedSessionPOST:(NSURLRequest *)request withCompletionHandlar:(void (^) (NSDictionary *dicResult,NSError *error, int status))completionBlock;
@end
然后,您可以将该类用于整个应用程序,而无需始终创建自定义委托
然后在你想要的地方使用它,比如:
NSURLRequest *request;
/*
Configure your Request Here
*/
[APIHelperClass apiCallSharedSessionPOST:request withCompletionHandlar:^(NSDictionary *dicResult, NSError *error, int status) {
}];
我的建议是创建并使用带有completionBlock的APIHelperClass
。
按照我的观点,这将比使用自定义委托更简单、更有效
要创建它,您可以执行以下操作:
在APIHelperClass.h中
#import <Foundation/Foundation.h>
@interface APIHelperClass : NSObject
+(void)apiCallSharedSessionPOST:(NSURLRequest *)request withCompletionHandlar:(void (^) (NSDictionary *dicResult,NSError *error, int status))completionBlock;
@end
然后,您可以将该类用于整个应用程序,而无需始终创建自定义委托
然后在你想要的地方使用它,比如:
NSURLRequest *request;
/*
Configure your Request Here
*/
[APIHelperClass apiCallSharedSessionPOST:request withCompletionHandlar:^(NSDictionary *dicResult, NSError *error, int status) {
}];
感谢您的帮助,但我仍然需要委托人在框架之外返回我的值
我得到通知说,每当我完成NSURLSessionDataTask时,委托都会变为null,我想这是因为在我收到NSURLSessionDataTask的响应后,委托已经被释放了,所以我尝试将@property delegate更改为strong,它就可以工作了。我可以再次使用委托返回我的值。谢谢谢谢您的帮助,但我仍然需要代表在框架外返回我的值
我得到通知说,每当我完成NSURLSessionDataTask时,委托都会变为null,我想这是因为在我收到NSURLSessionDataTask的响应后,委托已经被释放了,所以我尝试将@property delegate更改为strong,它就可以工作了。我可以再次使用委托返回我的值。谢谢方法onjsonhttprekult是自定义协议吗?如果是这样,你有符合这个协议吗?嗨,克根,是的,这是自定义协议。我试着在NSURLSessionDataTask之外放置JSONHttpResult,它可以工作,但我不明白当我在NSURLSessionDataTask内部放置时,您是否可以显示设计的协议和正在使用的控制器。您是否为控制器分配了协议,如controllerObj.delegate=self;ETC您从responseStatusCode
中获得的值是多少?嗨,Piyush Patel,responseStatusCode值如200或404是JsonHttpRequest上的方法,是自定义协议吗?如果是这样,你有符合这个协议吗?嗨,克根,是的,这是自定义协议。我试着在NSURLSessionDataTask之外放置JSONHttpResult,它可以工作,但我不明白当我在NSURLSessionDataTask内部放置时,您是否可以显示设计的协议和正在使用的控制器。您是否为控制器分配了协议,如controllerObj.delegate=self;ETC您从responseStatusCode
中获得的值是多少?您好,Piyush Patel,responseStatusCode值如200或404Hi Piyush Patel,谢谢您的帮助,但我仍然需要代表在框架外返回我的值。我得到通知说,每当我完成NSURLSessionDataTask时,委托都会变为null,我想这是因为在我收到NSURLSessionDataTask的响应后,委托已经被释放了,所以我尝试将@property delegate更改为strong,它就可以工作了。我可以再次使用委托返回我的值。谢谢Piyush Patel,谢谢你的帮助,但我仍然需要代表在框架之外回报我的价值。我得到通知说,每当我完成NSURLSessionDataTask时,委托都会变为null,我想这是因为在我收到NSURLSessionDataTask的响应后,委托已经被释放了,所以我尝试将@property delegate更改为strong,它就可以工作了。我可以再次使用委托返回我的值。谢谢