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同步网络请求处理程序返回结果_Ios_Objective C_Multithreading_Networking - Fatal编程技术网

ios同步网络请求处理程序返回结果

ios同步网络请求处理程序返回结果,ios,objective-c,multithreading,networking,Ios,Objective C,Multithreading,Networking,我遇到的问题是,我的应用程序有一个线程,它周期性地需要在循环中发出一系列网络请求。由于这是在一个单独的线程内,并且由于请求的性质(对本地网络上的设备的请求,响应很简单),我希望同步执行此操作。网络通信是一个独立的网络类,而不是数据库控制器类 我无法在networking类中获得从完成处理程序内部返回内容的方法 + (void)GetMessages { NSURLSession *session = [NSURLSession sharedSession]; NSURLRequest

我遇到的问题是,我的应用程序有一个线程,它周期性地需要在循环中发出一系列网络请求。由于这是在一个单独的线程内,并且由于请求的性质(对本地网络上的设备的请求,响应很简单),我希望同步执行此操作。网络通信是一个独立的
网络
类,而不是
数据库控制器

我无法在
networking
类中获得从完成处理程序内部返回内容的方法

+ (void)GetMessages
{
   NSURLSession *session = [NSURLSession sharedSession];
   NSURLRequest *request = [networking makeAuthenticatedRequest:@"subpath.html"];
   //NSString* returnable;
   NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                   completionHandler:
                              ^(NSData *data, NSURLResponse *response, NSError *error) {
                                  NSString* newStr = [[NSString alloc] initWithData:data
                                                         encoding:NSUTF8StringEncoding];
                                  //returnable = newStr;
                                  //return(newStr)
                                  NSLog(newStr);
                              }];
   [task resume];
}
上面的代码可以工作,但除了打印请求的结果外,不做任何事情。当我尝试任何被注释掉的添加和必要的更改时,没有任何效果。我甚至尝试传递对调用对象的引用,并更新一个属性,以便在完成处理程序中存储newStr,但即使这样也不起作用

我所尝试的可能吗?如果是,怎么做


我可能应该补充一点,代码需要与ios 7-9兼容。

您需要执行以下操作:

NSURLSession *session = [NSURLSession sharedSession];
NSMutableURLRequest *request =
[NSMutableURLRequest requestWithURL:[NSURL
                                     URLWithString:@"https://www.yahoo.com"]
                cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                    timeoutInterval:10
 ];

__block NSString* returnable; // notice the __block here
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                completionHandler:
                ^(NSData *data, NSURLResponse *response, NSError *error) {
                 NSString* newStr = [[NSString alloc] initWithData:data
                                    encoding:NSUTF8StringEncoding];
                 returnable = newStr;
                 // return(newStr); You cant return this here. Because the callback doesn't permit you to do so.
                 NSLog(@"%@", newStr);
        }];
[task resume];