2013-07-02 80 views
0

這裏的問題,我從2個文本字段接收數據,我想將該數據追加到一個mutableData中以獲得1個數組並通過OutputStream發送它。 here's不能將數據附加到NSMutableData得到分段錯誤11

我聲明爲全局變量下一

NSMutableData* bufferToSend; 

在init方法我做過一任代碼:

bufferToSend = [[NSMutableData alloc] initWithCapacity:0]; 

的方法,我發信息:

NSString* stringArrayFromTextField1; 
[bufferToSend initWithCapacity:0]; 
stringArrayFromTextField1 = [[NSString alloc] initWithString:[textfield1 text]]; 
[bufferToSend appendData:stringArrayFromTextField1]; //here gives me segmentation fault 

當代碼嘗試執行追加它會崩潰我錯過了什麼?

+0

你不能追加一個NSString到NSMutableData。首先將你的NSString轉換爲NSData。 –

+0

你不應該在初始化的對象上再次調用'initWithCapacity'。什麼是'getCurrentCmdBuffer'? –

+0

抱歉getCurrentCmdBuffer是bufferToSend ...所以要附加數據,它必須是NSData類型? –

回答

1

有在你的代碼的幾個錯誤/問題:

  • [bufferToSend initWithCapacity:0];對於已經初始化的對象是沒有意義的。
  • [[NSString alloc] initWithString:...]呼叫是完全不必要的,因爲 [textfield1 text]已經是一個字符串。
  • appendData:預計NSData,而不是NSString。這可能會導致崩潰。 (難道編譯器不顯示有關不兼容類型的警告?)

然後,代碼簡化爲:

NSMutableData* bufferToSend; 
bufferToSend = [[NSMutableData alloc] initWithCapacity:0]; 

NSData *dataFromTextField = [[textfield1 text] dataUsingEncoding:NSUTF8StringEncoding]; 
[bufferToSend appendData:dataFromTextField]; 
+0

我明白了,對此我是新的,不,它沒有告訴我錯誤或警告感謝您的幫助,現在它的工作。 –

0

你傳入其中的NSData對象預期的NSString對象。但是,我沒有看到任何理由將它追加到剛剛創建的數據中,因爲它是空的!所以這會很好:

stringArrayFromTextField1 = [[NSString alloc] initWithString:[textfield1 text]]; 
bufferToSend= [[NSKeyedArchiver archivedDataWithRootObject: stringArrayFromTextField1] mutableCopy]; 
+0

我需要追加數據,因爲我收到來自不同文本字段的信息,並且在發送之前它們應該位於1個數組中。我試過你的解決方案,它的工作,感謝您的建議 –