2012-10-30 128 views
0

我想創建一個NSMutableURLRequest這樣的:爲什麼NSMutableURLRequest實例導致崩潰?

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

當我在我的iPhone 4S,應用程序崩潰運行它,我得到以下異常:

二○一二年十月三十〇日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:終止叫做拋出異常

怎麼了?

+0

你是否在其他代碼中調用'absoluteURL'?崩潰告訴你,你正試圖在NSString實例上使用'absoluteURL'消息。 – 2012-10-30 15:12:06

+0

@adamjansch Nope – Timo

回答

6

很多問題: 首先看看如何調用NSString和NSURL方法。我已經完成了你粘貼的代碼。

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

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

將NSString包裝到NSURL中的訣竅 - 謝謝! – Timo

+0

這一個工作! –

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

(從技術上說,這兩條線可以合併,我已經分開他們要清楚發生了什麼事。)

此外,雖然可能與您的崩潰無關,但不應將您的URL變量URLWithString稱爲,因爲這是class method of NSURL的名稱。確保爲它提供一個唯一的名稱,並以小寫字符開頭(至少,這會讓你的代碼更易於破譯)。