0

我有一个 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

我以前从未尝试过这样做,并且一直在关闭我调查过的其他答案,但我无法让它发挥作用......任何帮助将不胜感激。

4

2 回答 2

2

您的第一行没有用,因为您随后在第二行重新定义了 reduceDataPacket,因此应该删除第一行。我猜 myCompressedData 是 NSData 而不是 NSMutableData,所以将第二行更改为:

NSMutableData *reducedDataPacket = [myCompressedData mutableCopy];
于 2013-07-15T22:43:09.630 回答
0

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

NSMutableData *reducedDataPacket = [myCompressedData mutableCopy];

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

[reducedDataPacket setLength:(reducedDataPacket.length - 6)];
于 2013-07-15T22:45:55.473 回答