Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone xcode,nslog_Iphone_Ios_Objective C_Xcode - Fatal编程技术网

Iphone xcode,nslog

Iphone xcode,nslog,iphone,ios,objective-c,xcode,Iphone,Ios,Objective C,Xcode,下面的代码在单击tinyurl链接时为我提供了tinyurl链接上的NSLog重定向位置。但是,如果我删除以下代码段[[UIApplication sharedApplication]openURL:[request URL]],它将提供NSLog中的实际网站,而不是tinyurl链接。在展示共享应用程序代码时,如何在NSLog中显示实际的网站URL - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequ

下面的代码在单击tinyurl链接时为我提供了tinyurl链接上的NSLog重定向位置。但是,如果我删除以下代码段
[[UIApplication sharedApplication]openURL:[request URL]],它将提供NSLog中的实际网站,而不是tinyurl链接。在展示共享应用程序代码时,如何在NSLog中显示实际的网站URL

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType  {
    NSLog(@"Redirect Location: %@",[request.URL absoluteString]);
    [[UIApplication sharedApplication] openURL:[request URL]];
}
简短答复:

使用
UIWebViewDelegate
方法
shouldStartLoadWithRequest
并不是一个很好的机制来确定你将被重定向到哪个站点(特别是从你的代码判断,你最终将在外部应用程序中打开它,而不是在你的
UIWebView
),因为在重定向发生之前,您将获得
shouldStartLoadWithRequest
。不过,您可以使用
NSURLConnection
和方法来确定最终将重定向到哪里

长答覆:

如果查看
shouldStartLoadWithRequest
,如果返回
YES
,则会让
UIWebView
跟随重定向请求。考虑下面的<代码> BooDistAtgStultUpRebug < /C> >:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"%@", request.URL);
    return YES;
}
若您将它和一个随机的
bit.ly
URL一起使用,比如说,
http://nyti.ms/Yi6EAk
,您将看到以下日志:

2013-03-12 21:23:31.418 webtest[6959:c07] http://nyti.ms/Yi6EAk 2013-03-12 21:23:31.511 webtest[6959:c07] http://bit.ly/Yi6EAk?cc=0d7134b272b1004cb954d0400076e9fa 2013-03-12 21:23:31.560 webtest[6959:c07] http://www.nytimes.com/2013/03/13/us/politics/ryans-plan-aims-to-balance-budget-in-10-years.html?hp&_r=0 然后,您可以实现
connection:willSendRequest:redirectResponse:
,这是一种
nsurConnectionDataDelegate
方法,它将跟踪各种重定向:

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
{
    self.url = request.URL;

    return request;
}
显然,因为您正在使用
NSURLConnection
跟踪重定向,但我们并不真正关心通常使用
NSURLConnection
检索的
responseData
,我们可以在收到良好响应后立即取消连接(确信我们已经知道最终重定向到哪个站点):

顺便说一下,您可能还希望捕获连接错误,例如:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"Ok, we failed trying to retrieve data from %@", self.url);
}
最后,值得指出的是,这种使用
NSURLConnection
发出HTTP请求并让它跟踪整个重定向过程的技术效率非常低,因此您必须决定它是否值得。但这是一种确定HTTP重定向将把您引向何方的方法


最后一个警告是,这捕获了传统的重定向,但是如果页面正在执行任何客户端JavaScript重定向,我认为这项技术不起作用。但是,它适用于绝大多数重定向的HTTP请求。

您是说,如果删除此方法的第二行,您会得到与第一行不同的结果吗提供一些我们可以运行的代码来演示这个问题?是的,代码应该发布在上面。只需尝试将web视图链接到具有bitly URL的站点。要测试这一点,必须使用web视图创建整个应用程序。您必须自己做过一些测试,包括最小化代码,试图解决这个问题,所以请共享结果我相信问题是UIAPPLICATION在请求url完全读取它之前就打开了。有什么解决方案可以阻止它吗?哦…回答不错,你救了我!+1
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [connection cancel];

    NSLog(@"Ok, we now know that the resulting URL is %@", self.url);
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"Ok, we failed trying to retrieve data from %@", self.url);
}