为什么NSMutableURLRequest实例化会导致崩溃?

时间:2012-10-30 15:09:36

标签: objective-c nsmutableurlrequest

我正在尝试创建一个像这样的NSMutableURLRequest:

NSURL *URLWithString = [
    NSString stringWithFormat:@"%@?%@",
    urlString,
    datas
];
NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:URLWithString] autorelease];

当我在iPhone 4S上运行时,应用程序崩溃,我得到以下异常:

  

2012-10-30 15:58:53.495 [429:907] - [__ NSCFString absoluteURL]:   无法识别的选择器发送到实例0x1cd74a90

     

2012-10-30 15:58:53.497 [429:907] ---由于未被捕获而终止应用程序   异常'NSInvalidArgumentException',原因:' - [__ NSCFString   absoluteURL]:无法识别的选择器发送到实例0x1cd74a90'

     

---首先抛出调用堆栈:

     

(0x361b62a3 0x344c697f 0x361b9e07 0x361b8531 0x3610ff68 0x3611363f   0x320396e7 0x32039551 0x320394ed 0x33bde661 0x33bde597 0x387e1   0x376d9f1f 0x376da9a9 0x341c535d 0x3618b173 0x3618b117 0x36189f99   0x360fcebd 0x360fcd49 0x366392eb 0x374db301 0x37cc1 0x37c58)

     

libc ++ abi.dylib:终止调用抛出异常

怎么了?

2 个答案:

答案 0 :(得分:6)

很多问题: 首先看看如何调用NSString和NSURL方法。我已经为你粘贴的代码完成了它。

NSURL * myUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@?%@",urlString,datas]];

NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:myUrl] autorelease];

答案 1 :(得分:2)

您的NSURL创建代码错误。

NSURL *URLWithString = [NSString stringWithFormat: @"%@?%@", urlString, datas];

在这里,您尝试使用NSString class method (stringWithFormat)直接创建NSURL。结果是您的变量URLWithString类型错误,当您发送NSURL消息时,您将会遇到崩溃。

要解决此问题,您需要首先创建一个URL地址的NSString,并使用它来实例化NSURL,如下所示:

NSString *completeURLString = [NSString stringWithFormat:@"%@?%@", urlString, datas];
NSURL *completeURL = [NSURL URLWithString: completeURLString];

(从技术上讲,这两行可以合并;我已将它们分开,以明确发生了什么。)

此外,虽然可能与您的崩溃无关,但您不应该调用您的网址变量URLWithString,因为这是class method of NSURL的名称。确保为它提供一个唯一的名称,并以小写字符开头(至少,这将使您的代码更容易为其他人解密)。