如何在主线程中返回变量如回调?

时间:2016-01-13 10:47:57

标签: objective-c ios7 xcode7

我在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向服务器请求并在块中返回数据。

问题是- (BOOL) authorize返回的速度更快return self.requestSuccessfull,并且始终为FALSE。

1 个答案:

答案 0 :(得分:2)

此请求是异步的,因此您应该使用block进行回调。您可以将代码更改为:

$this->

你可以像这样使用:

 - (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
        }
    }];
} 

希望这有帮助!