【问题标题】:How to determine whether to perform segue based on JSON result from another thread如何根据来自另一个线程的 JSON 结果确定是否执行 segue
【发布时间】:2026-01-29 22:55:01
【问题描述】:

我有一个登录视图。当用户单击“登录”按钮时,应用程序将验证帐户,然后决定是否进行 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结果。

【问题讨论】:

    标签: ios objective-c iphone json


    【解决方案1】:

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

    - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
    {
        return NO;
    }
    

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

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

    【讨论】:

      最近更新 更多