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

时间:2012-07-04 01:34:43

标签: objective-c ios nsurlconnection 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

我做错了什么?

4 个答案:

答案 0 :(得分:1)

您需要格式化字符串。试试这个:

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

答案 1 :(得分:1)

我认为您正在考虑NSString的stringWithFormat:

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

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

答案 2 :(得分:0)

问题是

[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]];

答案 3 :(得分:0)

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。

请参考this SO question如何做到这一点(不要担心这很容易)!