Cocoa touch 如何添加nsdata

Cocoa touch 如何添加nsdata,cocoa-touch,nsdata,Cocoa Touch,Nsdata,如何附加nsdata,我将在套接字上发送的第一条消息上附加长度数据 我使用这样的代码,但运行时出错 int lendata = [message length]; NSData *firstdata = [NSData dataWithBytes: &lendata length: sizeof(lendata)]; NSData *mdata = [message dataUsingEncoding:NSUTF8StringEncoding]; NSMutableData *secon

如何附加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];
请告诉我还有别的办法吗
谢谢你的帮助。

瞥一眼我的水晶球:

  • 您正在将
    seconddata
    声明为
    NSMutableData
    实例,但随后使用
    [NSData dataWithData:
    而不是
    [NSMutableData dataWithData:
    ]对其进行初始化,因此
    seconddata
    最终将不可更改,并且无法追加到它

  • 您正试图附加到
    firstdata
    ,这也是不可变的

  • 解决方案:使
    firstdata
    可变:

    NSMutableData *firstdata = [NSMutableData dataWithBytes: &lendata
                                                     length: sizeof(lendata)];
    [firstData appendData:[message dataUsingEncoding:NSUTF8StringEncoding]];
    
    然后您可以安全地删除
    mdata
    seconddata
    ,因为它们不再需要了

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

    请编辑您的答案并格式化您的代码:只需选择它,然后按
    {}
    按钮将其缩进四个空格(这是我们对“代码”的标记)。@Henrik p.Hessel:很可能是
    NSData
    不对
    appendData:
    做出响应的错误。谢谢Tamas,这是有效的,但我仍然有问题,我的nsstring数据是42个字符的len,我想在第一个数据上添加hexa a2(42 dec)数据,但输出是a2 00 00 XX XX XX,直到42个字符,XX是正确的,但为什么a2有00 00?我的哪个代码是错误的?在您的系统中,整数存储在四个字节中,因此
    [NSMutableData dataWithBytes:&lendata length:sizeof(lendata)]
    存储四个字节。这是意料之中的。如果您只想存储一个字节,请使用
    unsigned char
    作为
    lendata
    的类型,并确保字符串长度不超过255个字符。顺便说一句,如果消息中包含的字符在UTF-8编码中由多个字节编码,您将遇到麻烦。我首先将消息转换为
    NSData
    (例如,
    NSData*msgdata=[messagedatausingencoding:NSUTF8StringEncoding]
    ),然后使用
    msgdata
    的长度而不是字符串的长度。