大家好 我有一个客观的困境: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:@“announcements%@%20%d%20example.ashx”,monthString,day]];
解码它看起来像这样
stringByAppendingFormat:@“公告%@%d example.ashx”]];
这应该更容易理解.. 当我使用%20运行时,它显示“找不到请求的文档” 当我用空格(“”)运行时,它只是白色,没有任何东西加载。
我知道URL是正确的,如果我把变量拿出来,那就是完全相同的问题,但是当我将%20移回baseURLStr时,它可以正常工作并加载,所以这是可以做的事情使用HTML代码和“stringbyAppendingFormat”字符串。
感谢任何帮助!
感谢您的时间
-Kyle
答案 0 :(得分:8)
每当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];
答案 1 :(得分:0)
如果我理解正确,那么您正在尝试生成一个嵌入了文字“%20”的字符串。 “%”字符在格式字符串中是特殊的。如果要插入文字百分比字符,则需要通过放置两个连续的“%”来转义它。像
[NSURL URLWithString:[baseURLStr stringByAppendingFormat:@"foo%%20bar"]];
这会将“foo%20bar”附加到字符串的末尾。
答案 2 :(得分:0)
您可能只需编码百分号。尝试:stringByAppendingFormat:@"announcements%%20%@%%20%d%%20carson.ashx"]
答案 3 :(得分:0)
如果您不使用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
是无效的网址。不属于转义的百分号(例如,不属于%20
的一部分)必须自己编码为%25
。从技术上讲,@
也应该被转义(如%40
),但是IIRC NSURL会放弃。{/ p>