2011-05-18 94 views
6

我怎麼可以追加nsdata,我會追加第一封郵件上的長度數據發送套接字 我使用這樣的代碼,但在運行時出錯。如何append nsdata

int lendata = [message length]; 
NSData *firstdata = [NSData dataWithBytes: &lendata length: sizeof(lendata)]; 
NSData *mdata = [message dataUsingEncoding:NSUTF8StringEncoding]; 
NSMutableData *seconddata = [NSData dataWithData:mdata]; 
[firstdata appendData:secondata]; 

請告訴我們,如果有另一種方式 感謝您的幫助。

+0

什麼錯誤? – 2011-05-18 09:18:36

+0

@Henrik P. Hessel:很可能是一個錯誤,即'NSData'不響應'appendData:'。 – DarkDust 2011-05-18 09:28:45

回答

17

掃視到我的水晶球:

  1. 您聲明seconddataNSMutableData實例,但你初始化它使用的[NSData dataWithData:]代替[NSMutableData dataWithData:],所以seconddata不會到底是可變的,你不能追加到它。

  2. 您試圖追加到firstdata,這也不可變。

解決方案:讓firstdata可變:

NSMutableData *firstdata = [NSMutableData dataWithBytes: &lendata 
               length: sizeof(lendata)]; 
[firstData appendData:[message dataUsingEncoding:NSUTF8StringEncoding]]; 

然後你就可以安全的將mdataseconddata,因爲他們不需要了。

+0

感謝Tamas它是工作,但我仍然有問題,我的nsstring數據是42個字符len,我想添加第一個數據hexa a2(42 dec)數據,但輸出是a2 00 00 00 XX XX XX直到42個字符,XX是正確但爲什麼a2有00 00 00?我的代碼錯了? – user752846 2011-05-18 09:31:10

+1

整數在系統中以四個字節存儲,因此''[NSMutableData dataWithBytes:&lendata length:sizeof(lendata)]''存儲四個字節。這是預料之中的。如果你只想存儲一個字節,使用''unsigned char''作爲''lendata''的類型,並確保你的字符串長度不超過255個字符。 – 2011-05-18 09:41:32

+1

順便說一下,如果你的消息包含UTF-8編碼中多於一個字節編碼的字符,你將會陷入困境。我首先將消息轉換爲NSData(例如NSData * msgdata = [message dataUsingEncoding:NSUTF8StringEncoding]''),然後使用msgdata的長度代替字符串的長度。 – 2011-05-18 09:42:29

6
NSMutableData *first_data = [NSMutableData dataWithContentsOfURL:self.firstURL]; 
NSMutableData *second_data = [NSMutableData dataWithContentsOfURL:self.secondURL]; 
[first_data appendData:second_data]; 
[first_data writeToURL:url atomically:YES]; 

檢查上面的代碼進行追加

+0

請編輯你的答案並格式化你的代碼:只需選擇它,然後按下[{}'按鈕以縮進四個空格(這是我們的代碼「代碼」 「)。 – DarkDust 2011-05-18 09:27:06