2010-01-15 35 views
2

我使用ASIHTTP插入%,并试图执行一个网站的GET请求的NSURL:设置与%@决策值等于%@代替@

NSURL *url = [[NSURL URLWithString:@"/verifyuser.aspx?user=%@" relativeToURL:@"http://domain.com"],userName retain];  
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setTemporaryFileDownloadPath:@"myfile2.txt"]; 
[request setDownloadDestinationPath:@"myfile.txt"]; 

[request startSynchronous]; 

然而,当我把一个断点在[request startSynchronous]上并进入调试器,请求对象的url值等于userName变量。我试图插入userName变量到一个字符串,然后用它作为URL,所以在我的NSURL声明中有些东西是不正确的。

感谢您的帮助!

回答

9

你的代码不正确,你是不是做正确的字符串格式化,它应该是这样的:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"/verifyuser.aspx?user=%@", userName] relativeToURL:@"http://domain.com"]; 

注意,你不需要保留,你只是把它传递给请求的URL以及。

+0

请参阅NSString的文档:http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/clm/NSString/stringWithFormat: – Eld 2010-01-15 23:36:36

+0

嗯,当我这样做时,我的程序在控制台上得到SIGABRT: - [NSCFString absoluteURL]:无法识别的选择器发送到实例0x2630c 2010-01-15 18:32:16.013 HTTPExampleProject [18253:207 ***终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因: '*** - [NSCFString absoluteURL]:无法识别的选择发送到实例0x2630c' – quantumpotato 2010-01-16 00:33:34

+0

您可以发布您更新的代码? – 2010-01-16 02:05:26

0

这NSURL方法不指望一个格式字符串。 Objective-C编译器对于一种方法所期望的方式做出了非常薄弱的​​假设,这可能是您混淆的根源。

使用[NSString stringWithFormat:@"..."]代替。

目前的语法使用解析为NSURL* url = [(NSURL* object), userName retain];,这一点,您可能已经猜到的,无效的。事实上,我真的很想知道这是如何编写的。