【发布时间】:2016-02-26 13:30:10
【问题描述】:
这种异步特性让我很反感。
我正在创建一个可以在我的应用程序中使用的类。在课堂上,我有多个用于多个后端 API 的 URL(a.com/A a.com/B 等)。让我们调用类 NwrkDriver
@implementation NwrkDriver: NSObject
// Data is already formatted into a JSON doc.
- (int)PostToServer:(NSString *)url WithData:(NSData *)postData
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:url] ];
[request setHTTPMethod:@"POST"];
<snip> deleted code for readability </snip>
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest
completionHandler
{
// Handle response here
// Where to put response obtained here?
}];
[uploadTask resume];
return 0;
}
- (int) DoAPI_A_WithData: (NSData *)data AndResult: (NSData *)result
{
NSString *url = "https://example.com/A";
[ self PostToServer:url WithData:data];
// How to populate results here?
}
@end
我想在代码中的其他类中使用这个 NwrkDriver。所以理想情况下,如果我想登录,我将在 NwrkDriver 类中创建登录 API 调用,并使用适当的数据调用它。所以在登录类中
@implementation Login: NSObject
{
- (int) doLogin
{
NwrkDriver *nwrk = [[NwrkDriver alloc] init]
NSData *req, *response;
<snip> deleted code for readability </snip>
[nwrk DoAPI_A_WithData:req AndResult: response];
// Now parse the response which is JSON also
}
}
看起来我正在编写/思考串行执行,但事实并非如此。
由于 NSURLSession 的异步特性,人们如何处理像 auth 这样的调用,或者只是对后端的简单请求/响应?它们都必须本质上是异步的吗?如果是这样,我该怎么做?
【问题讨论】:
-
看相关栏目,有几个解决办法。
标签: ios objective-c