URL applicationWillTerminate目标C

问题描述:

我一直在努力执行或请求的URL,德applicationWillTerminate事件中,但是当我这样做,其他的功能,如:URL applicationWillTerminate目标C

- (NSURLRequest *)connection:(NSURLConnection *)connection 
      willSendRequest:(NSURLRequest *)request   redirectResponse:(NSURLResponse *)redirectResponse { 
    [baseURL autorelease]; 
    baseURL = [[request URL] retain]; 
    return request; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [responseData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [responseData appendData:data]; 
} 

他们没有得到执行,我猜因为,执行它的最后一个函数或事件是applicationWillTerminate。有没有办法达到或做到这一点。

如果你能够把它解决,我会非常惊讶。 applicationWillTerminate不是在说谎!当然你可以设置一个请求并发送它,但是一旦这个方法返回,你的代理将无法长时间地接收和响应回调。

恐怕您可能需要找到另一种方法来实现您的需要。

+0

我已经调试代码,当我进入到应用程序,(登录)执行的URL,注销url,向服务器通知该退出,然后进程停止。它工作正常。当我尝试在applicationWillTerminate中执行此操作时,此问题开始,当我使用我的注销运行url时,执行url的方法不会执行。 – 2012-02-24 17:59:16

applicationWillTerminate delegate method for UIApplication的Apple文档指出,您执行此方法大约需要五秒钟来执行任务并返回。调用一个使用网络并且运行时间不确定的方法似乎违反了该方法的意图。

+0

我必须让我知道我退出的服务器,要做到这一点,我必须运行的URL。非常感谢。 – 2012-02-24 18:02:14

+0

好吧,基于Apple文档,我认为你不应该使用任何基于委托的网络通信。所以也许你可以想出另外一种方式来发送不涉及检索数据的单向网络流量或者像认证这样的复杂事务。它是什么样的服务器? – bneely 2012-02-24 20:49:11

+0

好的,感谢您的建议,让我检查我使用的服务器类型,换句话说,我如何检查服务器的种类,你是什么意思? – 2012-02-24 21:01:24

此时一个有用的技术是简单地保存一个标志,指出“在下一次启动时,应用程序需要运行此URL请求。”然后,下次应用程序启动时,如果标志为true,请运行URL请求。这可能不适合所有情况,但它有足够的时间运行的优势。

+0

事实上,当用户登录时,我已经执行了url,但问题是,如果您从未尝试输入应用程序线程挂起。 – 2012-02-24 18:07:37

我昨天遇到同样的问题,并使用下面的代码片断解决它:

NSURLResponse* response = nil; 
NSString* requestUrlString = <your URL>; 
NSMutableURLRequest *syncRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestUrlString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30]; 
[NSURLConnection sendSynchronousRequest:syncRequest returningResponse:&response error:nil];