关闭应用并在 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的主要内容,如果未能解决你的问题,请参考以下文章

Reface.AppStarter 框架初探

通过许多 appstarts 保存价值的简单方法?

活动生命周期。当应用程序已经打开(折叠)正在关闭并在图标单击时重新启动?

将 App_Start 更改为 AppStart

如何在远程服务器上启动 NodeJS 进程?

在 AWS Beanstalk 上部署 SpringBoot - 应用程序启动,连接到 RDS-DB,但浏览器无法连接