当我尝试在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]];