如何根据来自另一个线程的 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 个表的结果,但根据另一个表排除结果?