如何根据来自另一个线程的 JSON 结果确定是不是执行 segue

Posted

技术标签:

【中文标题】如何根据来自另一个线程的 JSON 结果确定是不是执行 segue【英文标题】:How to determine whether to perform segue based on JSON result from another thread如何根据来自另一个线程的 JSON 结果确定是否执行 segue 【发布时间】:2015-10-25 04:16:45 【问题描述】:

我有一个登录视图。当用户单击“登录”按钮时,应用程序将验证帐户,然后决定是否进行 segue。但是,POST 请求是异步的。

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

在我从服务器获取某些内容之前执行。这是我的代码:

- (void)isAuthenticaionConfirmed

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *parameters = @@"account":self.studentsNumber.text,
                                 @"password":self.passwordToJW.text;
    [manager POST:checkAutenticationURL parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
        NSLog(@"JSON: %@", responseObject);
        [self parseDictionary:responseObject];
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        NSLog(@"Error: %@", error);
        [self showAlert:@"3"];
    ];


- (void)parseDictionary: (NSDictionary *)dictionary

    NSString *errorInfo = dictionary[@"err"];
    if ([errorInfo isEqualToString:@"subsequent request failed"]) 
        [self showAlert:@"3"];
     else if ([errorInfo isEqualToString:@"login failed"]) 
        [self showAlert:@"2"];
     else 
        _name = dictionary[@"name"];
    

这里是segue相关的代码

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

    if (_name) 
        return YES;
     else 
        return NO;
    

这里的_name是用户使用正确帐号和密码时的JSON结果。

【问题讨论】:

【参考方案1】:

我首先拒绝任何类型的segue来解决它

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

    return NO;

然后在paresDictionary中调用[self performSegueWithIdentifier:@"filterSegue" sender:self]方法

看起来很奇怪。如果有人有更好的解决方案,欢迎发表评论! :-)

【讨论】:

以上是关于如何根据来自另一个线程的 JSON 结果确定是不是执行 segue的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 c# 根据来自 json 的 json 元素属性值验证数据条件

如何停止主 ui 线程,直到我得到来自 http 请求的响应

MySQL SELECT 来自 1 个表的结果,但根据另一个表排除结果?

确定 Flask 请求是不是来自 JavaScript

根据来自另一个数据集的 PROC SQL 的结果更新 SAS 数据集

根据CPU核心数确定线程池并发线程数