如何从NSMutableData对象的末尾删除字节

时间:2013-07-15 22:40:01

标签: iphone ios nsdata nsmutabledata

我有一个给我带来麻烦的NSMutableData对象,我试图从这个对象中删除最后6个字节

NSMutableData *reducedDataPacket = [[NSMutableData alloc] init];
        reducedDataPacket = [myCompressedData copy];

NSRange range = NSMakeRange([reducedDataPacket length]-6, 6);
        [reducedDataPacket replaceBytesInRange:range withBytes:NULL length:0];

但是,一旦最后一行执行我的应用程序崩溃,我将在下面留下此错误。

-[NSConcreteData replaceBytesInRange:withBytes:length:]: unrecognized selector sent to instance 0x1f037870
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteData replaceBytesInRange:withBytes:length:]: unrecognized selector sent to instance 0x1f037870

我之前从未尝试过这样做,而且我已经调查了其他的回答,但是我无法让这个工作......任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:2)

你的第一行没用,因为你在第二行重新定义reducedDataPacket,所以应该删除第一行。我猜测myCompressedData是NSData而不是NSMutableData,所以将第二行更改为:

NSMutableData *reducedDataPacket = [myCompressedData mutableCopy];

答案 1 :(得分:0)

首先你需要一个可变实例,不清楚你为什么创建一个然后复制它。你应该这样做:

NSMutableData *reducedDataPacket = [myCompressedData mutableCopy];

然后你想减少长度,而不是试图用任何东西填充部分数据:

[reducedDataPacket setLength:(reducedDataPacket.length - 6)];