Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 9:从框架中的NSURLSessionDataTask获取值_Ios_Objective C_Iphone_Xcode_Ios9 - Fatal编程技术网

iOS 9:从框架中的NSURLSessionDataTask获取值

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

我有一个iOS框架,它使用
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,它就可以工作了。我可以再次使用委托返回我的值。谢谢