当我尝试在iOS应用程序中传递NSURL中的参数时,为什么会出现此错误?

这就是我在公共方法中所拥有的 – (IBAction)methodName

NSString *quoteNumber = [[self textBox] text]; NSURL *url = [[NSURL alloc] initWithString:@"http://TestSite.com/virdirectory/Webservice1/Service1.asmx/GetQuote?number=%d", quoteNumber]; 

我得到的错误是:

方法调用的参数太多,预期为1,有2个

我究竟做错了什么?

initWithString方法只能接受普通的NSString,你要传递一个格式化的NSString,看看这段代码:

  NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"http://TestSite.com/virdirectory/Webservice1/Service1.asmx/GetQuote?number=%d", quotedNumber]]; 

这可能有点混乱,你可以按如下方式分解:

 NSString *urlString = [NSString stringWithFormat:@"http://TestSite.com/virdirectory/Webservice1/Service1.asmx/GetQuote?number=%d", quotedNumber]; NSURL *url = [[NSURL alloc] initWithString:urlString]; 

现在您的字符串已正确格式化, NSURL initWithString方法将起作用!

此外,为了将来您更清楚,您可以在设置quoteNumber字符串时利用Objective-C的点表示法语法,如下所示:

 NSString *quoteNumber = self.textBox.text; 

此外,您试图将此引号作为数字传递给urlString (如%d ),请记住, quotedNumber是一个NSString对象,当您尝试将其传递给stringWithFormat方法时会崩溃。 您必须首先将字符串转换为NSInteger或NSUInteger。

请参考这个问题如何做到这一点(不要担心它很容易)!

我想你正在考虑NSString的stringWithFormat: ::

 [NSURL URLWithString:[NSString stringWithFormat:@"http://TestSite.com/virdirectory/Webservice1/Service1.asmx/GetQuote?number=%@", quoteNumber]] 

还要注意格式说明符对%@的更改,因为它是NSString的一个实例(不是int)

你需要格式化你的字符串。 尝试这个:

 NSString *urlString = [NSString stringWithFormat:@"http://TestSite.com/virdirectory/Webservice1/Service1.asmx/GetQuote?number=%@", quoteNumber]; NSURL *url = [[NSURL alloc] initWithString:urlString]; 

问题是

 [NSURL initWithString:] 

需要一个NSString类型的参数,但你传递了两个参数。

您需要传递一个NSString参数。 更改您的代码

 NSURL *url = [[NSURL alloc] initWithString:@"http://TestSite.com/virdirectory/Webservice1/Service1.asmx/GetQuote?number=%d", quoteNumber]; 

 NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"http://TestSite.com/virdirectory/Webservice1/Service1.asmx/GetQuote?number=%d", quoteNumber]];