ios - 在NSURLSession之后同步执行方法

标签 ios objective-c synchronization nsurlsession

我目前正在尝试在NSURLSession完成后执行一种方法。问题是我无法以任何方式管理其对象的异步性质。我已经按照其他问题中的建议尝试了GCD和NSOperation,但没有任何变化:使用dataTaskWithRequest:completionHandeler:初始化后,应用程序开始执行程序中的下一个方法。

这是实现组网的方法:

-(void)sendData{
    NSData *JSONdata = [NSJSONSerialization dataWithJSONObject:userInfoToJSON options:0 error:&error];

            NSURL *url = [NSURL URLWithString:@"http://mobdev2015.com/register.php"];
            NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
            NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[JSONdata length]];

            [request setHTTPMethod:@"POST"];
            [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
            [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
            [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
            [request setHTTPBody:JSONdata];

            [[session  dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
            }]resume];
            });
}


这里是调用上面的方法的方法,我想在其中实现同步执行:

-(void)MethodWhichNeedsToBeSync{
//Creating a JSON object..
[self sendData:userInfoToJSON];
//MethodB wants to be executed if and only if sendData is completed
[self MethodB];
}


感谢您的答复。

最佳答案

在异步方法完成之后执行方法的方法是在异步方法的完成块(或闭包)中调用该方法。

对于您的情况,它看起来像这样:

[[session  dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

    if (!error) {
        [self MethodB];
    }

}]resume];
});


成功完成异步方法后要运行的调用将移到完成处理程序中。

根据需要,只有且仅当sendData完成时,这样才能完成MethodB的执行。

关于ios - 在NSURLSession之后同步执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34029701/

相关文章:

ios - 没有互联网连接时禁用按钮

ios - 访问 UIWebView 的 JavaScriptCore 引擎

ios - 在 iOS 中获取特定网站 URL 的缩略图和标题?

ios - 在 xcode 的 Tabbar 中创建显示案例 View

android - ionic vs Material 设计 vs tabris,或者 vs 其他框架

ios - Facebook 好友列表突然返回 null

ios - Swift:自定义 ViewController 初始化器

java - Java中哪些情况需要同步方法访问?

c - 互斥锁和解锁的一些解释

c - OpenCL:内核之间的同步