主线程中的 return 变量如何作为回调?

How return variable in main thread like as callback?

我在Objective c中有以下方法:

- (BOOL) authorize {

    OauthObject* oauthObj = [OauthObject sharedManager];

    [[Manager sharedManagerServerRequest] authorize:(oauthObj) and:login.text withPassword:password.text completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        NSLog(@"%@", error);

        if(error == NULL && data != nil) { 
            self.requestSuccessfull = YES;

        } else {
            //NSLog(@"Error: %@", error);
            // Display error
        }
    }];

    return self.requestSuccessfull;
 }

在这个函数中有方法 authorize 向服务器请求和块中的 returns 数据。

问题是 - (BOOL) authorize returns 更快 return self.requestSuccessfull 并且它总是 FALSE。

这个请求是异步的,所以你应该使用块来回调。您可以将代码更改为:

 - (void)authorize:(void (^)(BOOL result))completionHanlder {
    OauthObject* oauthObj = [OauthObject sharedManager];

    [[Manager sharedManagerServerRequest] authorize:(oauthObj) and:login.text withPassword:password.text completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        NSLog(@"%@", error);

        if(error == NULL && data != nil) {
            completionHanlder(YES);

        } else {
            completionHanlder(NO);
            //NSLog(@"Error: %@", error);
            // Display error
        }
    }];
} 

你可以这样使用:

[yourInstance authorize:^(BOOL result) {
    //user result here.
}];

希望对您有所帮助!