0

我使用了 Stack Overflow 问题中的这段代码:URLWithString: 返回 nil

//localisationName is a arbitrary string here
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false", webName];
NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* url = [NSURL URLWithString:webStringURL];

当我将它复制到我的代码中时,没有任何问题,但是当我修改它以使用我的 url 时,我遇到了这个问题:

格式字符串未使用数据参数。

但它工作正常。在我的项目中:

。H:

NSString *localisationName;

米:

NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* stringURL = [NSString stringWithFormat:@"http://en.wikipedia.org/wiki/Hősök_tere", webName];
NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* url = [NSURL URLWithString:webStringURL];

[_webView loadRequest:[NSURLRequest requestWithURL:url]];

我该如何解决这个问题?我的代码有什么遗漏吗?

4

2 回答 2

1

原始@字符串中的 用作webName插入值的占位符。在您的代码中,您没有这样的占位符,因此您告诉它放入webName您的字符串中,但您没有说在哪里。

如果您不想插入webName字符串,那么您的一半代码是多余的。所有你需要的是:

NSString* stringURL = @"http://en.wikipedia.org/wiki/Hősök_tere";
NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* url = [NSURL URLWithString:webStringURL];

[_webView loadRequest:[NSURLRequest requestWithURL:url]];
于 2013-01-17T13:28:26.933 回答
0

+stringWithFormat:方法将返回使用给定格式字符串创建的字符串作为模板,其余参数值将被替换到该模板中。并且在第一个代码块中,%@将被替换为webName.

在您的修改版本中,格式参数即@"http://en.wikipedia.org/wiki/Hősök_tere"不包含任何格式说明符,因此

NSString* stringURL = [NSString stringWithFormat:@"http://en.wikipedia.org/wiki/Hősök_tere", webName];

就像这样运行(带有警告Data argument not used by format string.

NSString* stringURL = @"http://en.wikipedia.org/wiki/Hősök_tere";

于 2013-01-17T13:37:59.217 回答