作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个viewcontroller,在其viewDidLoad中调用HelperClass类方法,如下所示:
- (void)viewDidLoad{
[super viewDidLoad];
self.usersArray = [SantiappsHelper fetchUsers];
}
+(NSArray *)fetchUsers{
NSString *urlString = [NSString stringWithFormat:@"http://www.myserver.com/myApp/getusers.php"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];
[request setHTTPMethod: @"GET"];
__block NSArray *usersArray = [[NSArray alloc] init];
dispatch_async(dispatch_get_main_queue(), ^{
// Peform the request
NSURLResponse *response;
NSError *error = nil;
NSData *receivedData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
if (error) {
// Deal with your error
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
NSLog(@"HTTP Error: %d %@", httpResponse.statusCode, error);
return;
}
NSLog(@"Error %@", error);
return;
}
NSString *responseString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
NSLog(@"responseString fetchUsers %@", responseString);
NSLog(@"inside of block");
usersArray = [NSJSONSerialization JSONObjectWithData:[responseString dataUsingEncoding:NSASCIIStringEncoding] options:0 error:nil];
});
NSLog(@"outside of block");
return usersArray;
最佳答案
实际的问题是“如何从异步方法返回结果?”
假设您有一个异步任务“ doSomethingAsync”(它是一个类方法,实例方法或函数,但这并不重要)。
熟悉的同步形式“ doSomething”将简单地返回结果,并可以如下声明:- (Result*) doSomething;
等效异步任务“ doSomethingAsync”可以使用完成处理程序声明:
typedef void (^completion_block_t)(Result* result)
- (void) doSomethingAsync:(completion_block_t)completionHandler;
- (void) fetchResult {
[Foo doSomethingAsync:^(Result* result){
self.result = result;
}];
}
doSomethingAsync:
方法。该块本身定义了异步任务完成时要采取的动作。
- (Promise*) doSomethingAsync;
- (void) fetchResult {
Promise* promise = [Foo doSomethingAsync];
promise.then(^(Result* result){
self.result = result;
});
}
@property then_block_t then;
promise.then(...)
then_block_t block = promise.then;
block( ... );
^(Result* result){ ... }
Promise* promise = [Foo doSomethingAsync];
promise.then(^(Result* result){
self.result = result;
});
[Foo doSomethingAsync]
.then(^(Result* result) {
self.result = result;
};
[Foo doSomethingAsync:^(Result* result){
self.result = result;
}];
then_block_t
返回的类型为
then
的块具有类型为
Promise
的返回值。
typedef Promise* (^then_block_t)(completion_block_t onSuccess);
[self asyncA:input]
.then(^(OutputA* outA) {
return [self asyncB:outA];
})
.then(^(OutputB* outB){
NSLog(@"end result: %@", outB);
return nil;
});
return [self asyncB:outA];
。
typedef Promise* (^then_block_t)(completion_block_t onSuccess, failure_block_t onFailure);
[self asyncA:input]
.then(^(OutputA* out) {
return [self asyncB:out];
}, nil)
.then(^(id result){
NSLog(@"result: %@", result);
return nil;
}, ^id(NSError*error){
NSLog(@"ERROR: %@", error);
return nil;
});
[self A]
.then(^(id result) {
return [self B:result];
}, nil)
.then(^(id result) {
return [self C:result];
}, nil)
.then(^(id result) {
return [self D:result];
}, nil)
.then(^(id result) {
NSLog(@"Success");
return nil;
}, ^id(NSError*error){
NSLog(@"ERROR: %@", error);
return nil;
});
关于ios - 如何将值从Helper类返回到 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416683/
到目前为止,我已经生成了以下代码来尝试将相关数据整合在一起。 但是,使用“+ 7”函数会产生以下问题。 Registration date = '2018-01-01' 它正在推迟 2018-04-0
我已经成功地将我的自定义购物车发布到 PayPal——它处理订单非常漂亮,当收到付款时,它会将数据发回我在配置中指定的 URL。代码基于此处找到的库:http://www.phpfour.com/bl
我是一名优秀的程序员,十分优秀!