gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:35:39 25 4
gpt4 key购买 nike

我目前正在尝试在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com