【问题标题】:iOS having issue setting a property in afnetworking 2.0 success and failure blockiOS 在 afnetworking 2.0 成功和失败块中设置属性时遇到问题
【发布时间】:2014-02-18 07:14:34
【问题描述】:

我正在尝试为我们的网站构建一个 ios 应用程序。我们已经使用 oauth 2.0 实现了 api。现在,我在设置属性时遇到问题。我正在使用 afnetworking2.0 进行联网。这是我想要实现的目标:

我正在编写允许我检查访问令牌的有效性或使用刷新令牌获取另一个访问令牌的函数。我在一个头文件中声明了一个布尔属性,它告诉我我的访问令牌是否有效。在向网站发出任何请求之前,我首先发出请求以使用函数检查访问令牌的有效性。在这个函数中,我根据令牌是否有效来设置布尔属性的值。现在,问题是我在 afnetworking2.0 发布/获取请求方法的成功或失败块中设置了这个属性,并且由于某种原因,如果我打印出我在功能,我没有看到预期值。我尝试了使用 __block 局部变量的不同方法,然后在函数末尾将布尔属性设置为此局部变量,但仍然没有成功。所以,我有点失落。我要做的就是实现一种检查访问令牌是否有效的方法,以便我可以在向 Web 服务器发出真正的请求之前对其进行更新。有没有更好的方法来做到这一点?我计划采取的第二种方法是存储 access_token 的 expiry_date 并在发出请求之前检查时间是否已经过去。在这种情况下,我将一个额外的请求保存到 Web 服务器。我仅在当前时间超过到期时间时才提出续订请求。但是,我在这里面临的问题是在成功块中设置属性。这是我要实现的功能:

- (BOOL) isTokenValid:(NSString *)accessToken
{
    __block BOOL tokenValid = NO;
    if (accessToken != nil)
    {
        static NSString *const baseUrl = @"baseurl";

        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        manager.securityPolicy.allowInvalidCertificates = YES;
        manager.requestSerializer = [AFJSONRequestSerializer serializer];

        [manager.requestSerializer setValue:[@"Bearer " stringByAppendingString:accessToken] forHTTPHeaderField:@"Authorization"];
        [manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

        [manager GET:baseUrl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
            tokenValid = YES;
            NSLog(@"Data: %@", responseObject);

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            tokenValid = NO;
        }];

    }
    else
    {
        tokenValid = NO;
    }

    self.tokenValid = tokenValid; // here I am setting the property, which I will be checking right after I call this function
    return tokenValid;
}

如您所见,这是我正在尝试的方法之一。我没有设置“tokenValid”,而是尝试在块内设置“self.tokenValid”,但没有看到任何运气。那么,如何在块内正确设置属性?

谢谢

【问题讨论】:

    标签: ios objective-c ios7 objective-c-blocks afnetworking-2


    【解决方案1】:

    设置变量没有问题。它只是在函数返回时没有设置,因为操作是异步的。

    【讨论】:

    • 知道如何更改代码以包含我想要的内容吗?现在我有'self.tokenValid'作为一个属性。但是,很快我会把它从这个类的一个属性变成一个单例类的属性。
    • @mdhossain:您不能指望在此函数返回时设置它。相反,您需要传递一个完成处理程序以在操作完成后执行,并且它具有 tokenValid 的值,并且完成处理程序可以获取 tokenValid 的值。调用者会将它需要对 tokenValid 做的任何事情放在完成处理程序中。
    • 在阅读了有关块以及如何将它们用作完成处理程序的教程后,我实际上理解了您所说的完成处理程序的含义。问题已经解决了。接受你的回答。谢谢
    猜你喜欢
    • 2021-03-23
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    相关资源
    最近更新 更多