2011-05-18 52 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