杀死所有视图/控制器并默认为主页按钮上的登录页面不适用于 Web 服务调用
Posted
技术标签:
【中文标题】杀死所有视图/控制器并默认为主页按钮上的登录页面不适用于 Web 服务调用【英文标题】:Kill all views/controllers and default to Login page on home button not working for web service calls 【发布时间】:2013-12-12 16:38:30 【问题描述】:我有一个 LOGIN 视图,它是根视图控制器。用户登录后以及在应用程序期间的任何时间,如果他单击主页按钮,我会使用以下方法删除所有可能的子视图: [view removeFromSuperview] 递归,这样我就可以杀死所有视图。我什至使用 [controller removeFromParentViewController]。
然而,如果当我们点击 iphone 主页按钮时,任何 web 服务调用正在运行,即使所有视图和控制器都被移除,来自 web 服务的响应由应用程序处理,并且由于 Push segue 被调用。如何在 AppDelegate 的应用程序中终止任何现有的 Web 服务调用?错误 " 找不到 segue "XXsearch" 的导航控制器。 这个错误显然是因为我删除了所有控制器和视图。
但是为什么 Web 服务响应仍然得到处理?还有另一种方法可以终止 Web 服务调用吗?
Web 服务调用是异步的。但是为什么控制器仍然存在来处理响应?这是网络服务调用:
[NSURLConnection connectionWithRequest:NSMutableURLRequestObject delegate:self];这是控制器中的代码,它是 Web 服务的委托:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection // 对响应对象做一些事情 [self performSegueWithIdentifier:@"XXsearch" sender:self];
【问题讨论】:
你能发布你的网络请求代码吗?否则任何答案都只是猜测。 @Clever 错误:刚刚添加了代码 【参考方案1】:根据connectionWithRequest:delegate:
的文档
在下载期间,连接保持对委托的强引用。当连接完成加载、失败或被取消时,它会释放该强引用。
这意味着即使您正在移除视图控制器,NSURLConnection
也会强制它保留。首先,您需要将连接保存在视图控制器的属性中。
self.connection = [NSURLConnection connectionWithRequest:NSMutableURLRequestObject delegate:self];
然后,当您的视图控制器从其父视图控制器中移除时,您需要确保取消连接并将其设置为 nil。
- (void)didMoveToParentViewController:(UIViewController *)parent
[super didMoveToParentViewController:parent];
if (!parent && self.connection)
[self.connection cancel];
[self setConnection:nil];
此外,您需要确保在连接完成或失败时将连接设置为 nil。
【讨论】:
这解释了很多行为。谢谢你。为什么将连接设置为零? 只是为了清理。取消连接后,您将不再使用该对象。以上是关于杀死所有视图/控制器并默认为主页按钮上的登录页面不适用于 Web 服务调用的主要内容,如果未能解决你的问题,请参考以下文章
xcode 从登录重定向到带有 uinavigation 的视图控制器