Iphone 带有变量的NSURL中的空间不';t载荷

Iphone 带有变量的NSURL中的空间不';t载荷,iphone,objective-c,ios4,Iphone,Objective C,Ios4,大家好 我有一个目标c迪莱马:P 我对objective-c非常陌生,我尝试过寻找答案,但没有结果 这就是我的情况。 我现在就把代码放在这里,否则就没有意义了。 我正在写下我需要的东西,这个代码现在不起作用,我稍后会解释原因 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"MMMM"]; NSString *monthString = [formatter st

大家好 我有一个目标c迪莱马:P 我对objective-c非常陌生,我尝试过寻找答案,但没有结果

这就是我的情况。 我现在就把代码放在这里,否则就没有意义了。 我正在写下我需要的东西,这个代码现在不起作用,我稍后会解释原因

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM"];
NSString *monthString = [formatter stringFromDate:date];
NSLog(@"MONTH STRING %@", monthString);
NSString *baseURLStr = @"http://www.mysite.ca/example";
NSURL *url = [NSURL URLWithString:[baseURLStr stringByAppendingFormat:@"announcements%20%@%20%d%20carson.ashx", monthString]];

[webView loadRequest:[NSURLRequest requestWithURL:url]];
[NSCalendar release];
所以,这就是问题所在。。。编码(HTML):stringByAppendingFormat:@“公告%@%20%d%20example.ashx”,月字符串,日]]

解码后看起来像这样

stringByAppendingFormat:@“公告%@%d示例.ashx”]

这应该更容易理解。。 当我使用%20运行时,它显示“未找到请求的文档” 当我使用空格(“”)运行时,它只是白色的,没有加载任何内容

我知道URL是正确的,如果我去掉变量,这是完全相同的问题,但当我将%20移回baseURLStr时,它工作正常,加载也很好,因此这与HTML代码和“stringbyAppendingFormat”字符串有关

感谢您的帮助

谢谢你的时间


-Kyle

每当NSURL在init之后返回nil(0x0)时,它几乎总是与不正确的url字符串相关。而且对于获取格式正确的字符串非常挑剔

我的建议是简单地构建字符串,不需要任何转义或url编码,然后简单地调用

myUrlString = [myUrlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
下面是它的标题声明

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc NS_AVAILABLE(10_3, 2_0);
通过这种方式,我总是知道我得到了NSURL类想要的格式

这里有一个例子

NSString *sUrl = @"http://www.myside.ca/example/announcements carson.ashx"; //notice the embedded space
sUrl = [sUrl stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL *url = [NSURL URLWithString:sUrl];

如果我理解正确,您正在尝试生成一个嵌入文本“%20”的字符串。“%”字符在格式字符串中是特殊的。如果要插入文字百分比字符,则需要通过放置两个连续的“%”来对其进行转义。像


这会将“foo%20bar”附加到字符串的末尾。

您可能只需要对百分号进行编码。请尝试:
stringByAppendingFormat:@“公告%%20%@%%20%d%%20carson.ashx”

如果您没有使用printf样式格式,请不要使用
stringByAppendingFormat:
。改为使用
stringByAppendingString:

第二,结果URL真的应该是
http://www.myside.ca/exampleannouncements%20%@%20%d%20carson.ashx
?或者中间应该有一条斜线:
http://www.myside.ca/example/announcements%20%@%20%d%20carson.ashx


另外,
http://www.myside.ca/exampleannouncements%20%@%20%d%20carson.ashx
是无效的URL。不属于转义的百分比符号(例如,不属于
%20
)本身必须编码,如
%25
。从技术上讲,
@
也应该被转义(如
%40
),但IIRC NSURL会让它溜走。

我不想把空间的%20放在一个%s中,因为它看起来不像一个实际的空间……对。问题可能是
stringByAppendingFormat:
正在吞噬您的%20中的百分号–如果是这样,您可以使用%%20来解决此问题。我使用字符串时遇到语义问题。而且应该有一个slashi忘了在代码中添加一个部分:/It’s monthString part但是monthString呢:/show the monthString告诉我一个完成的url应该是什么样子的确切示例。。。没有任何编码…只需小心当前url字符串没有包含任何百分比转义,否则会使urlinvalid@JasonCragun非常感谢。你的回答帮助我解决了问题。但是,自iOS 9.0以来,
StringByAddingPercentescapesusingEncode
已被弃用。我使用了
urlString=[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]相反,它工作得很好!
[NSURL URLWithString:[baseURLStr stringByAppendingFormat:@"foo%%20bar"]];