关闭应用并在 appstart 上启动 webview
Posted
技术标签:
【中文标题】关闭应用并在 appstart 上启动 webview【英文标题】:close app and launch webview on appstart 【发布时间】:2017-06-11 19:30:52 【问题描述】:我已发出 api 请求以从我的后端服务获取一些详细信息:
我想关闭我当前的视图控制器并通过从后端传入的 url 启动一个新网页:
NSDictionary *parameters = @@"X-Service-Code" : @"PP", @"Accept" : @"application/json", @"Content-Type" : @"application/json";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:url1 parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
NSMutableArray *jsonArray = [[NSMutableArray alloc]init];
jsonArray = [NSJSONSerialization JSONObjectWithData: responseObject options:NSJSONReadingMutableContainers error:nil];
[self dismissViewControllerAnimated:YES completion:nil];
NSString *urlAddress = [[jsonArray objectAtIndex:10]valueForKey:@"value"];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlAddress]]];
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
];
webview 正在后台启动,但是视图控制器没有被关闭。有什么建议吗?
【问题讨论】:
即使您已经关闭了 self,您仍在显示 self.webView?我有点迷路了。我不认为这是"because its not performed on the main thread thing"
的问题,因为如果您不设置完成队列,它将始终在主队列完成,除非您指定afnetwork 的completionQueue 以使用不同的队列。
【参考方案1】:
dismissViewControllerAnimated
需要在主线程上调用:
dispatch_async(dispatch_get_main_queue(), ^
[self dismissViewControllerAnimated:YES completion:nil];
);
【讨论】:
【参考方案2】:尝试在主线程上运行关闭代码:
dispatch_async(dispatch_get_main_queue(), ^
[self dismissViewControllerAnimated:YES completion:nil];
);
【讨论】:
我是在 viewdidload 还是 viewwillappear 上调用这个过程? 好的,AFHTTP 库似乎将在主线程***.com/a/28932187/8085849 上调度其回调,因此不需要 dispatch_async。在这种情况下,您如何确定成功:块实际上被调用了?请求是否确定成功完成?即你确定失败:块没有被调用? 最好从 viewWillAppear 方法发出 http 请求。 是的,我已经验证调用成功执行。但我在 viwdidload 中调用该过程。让我试试 viewwillappear 也许是因为我从 api 获取 url。加载网页视图的速度不够快?以上是关于关闭应用并在 appstart 上启动 webview的主要内容,如果未能解决你的问题,请参考以下文章