xcode 具有范围的NSData子数据崩溃

0ejtzxu1  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(200)

我有下面的代码,我得到了一个异常。
-[_NSInlineData将范围内的字节:替换为字节:]:发送到示例0x 6000027 ff 2 e0 '的无法识别的选择器终止,并出现未捕获的NSException类型异常
有人能指出这其中的问题吗?

NSMutableData *data = [[NSMutableData alloc] 
initWithLength:1000];

NSMutableData *d1 =(NSMutableData *) [data 
subdataWithRange:NSMakeRange(sizeof(uint8_t),10)];
uint8_t i = 10;
[d1 replaceBytesInRange: NSMakeRange(1, sizeof(uint8_t) 
withBytes:&i];
tvmytwxo

tvmytwxo1#

subdataWithRange:返回一个 * 不可变 * NSData示例。它是原始数据的副本。如果要替换该副本中的数据,而不影响原始data对象,可以执行以下操作:

NSData *tmp = [data subdataWithRange:NSMakeRange(sizeof(uint8_t),10)];
NSMutableData *d1 = [tmp mutableCopy];

如果要修改可变的data对象,请直接计算正确的范围:

// Offset derived from your example code, lines 5 and 7.
NSUInteger offset = sizeof(uint8_t) + 1;
NSRange range = NSMakeRange(offset, sizeof(uint8_t));
[data replaceBytesInRange:range withBytes:&i];

相关问题