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];