You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用subdataWithRange后调用replaceBytesInRange致NSMutableData崩溃排查

问题分析与修复

核心崩溃原因

subdataWithRange:方法返回的是不可变的NSData实例,你强制将它转换为NSMutableData只是编译层面的类型欺骗,实际对象是_NSInlineData(NSData的私有子类),并不支持replaceBytesInRange:withBytes:这个NSMutableData独有的方法,这直接导致了"unrecognized selector"崩溃。

次要语法错误

代码中NSMakeRange(1, sizeof(uint8_t)缺少闭合的右括号,正确写法应为NSMakeRange(1, sizeof(uint8_t)),这个语法问题会导致编译失败或额外运行时异常。

修复方案

若要对截取的数据做修改,需把subdataWithRange:返回的NSData包装为新的NSMutableData实例,修正后的代码如下:

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

// 将截取的不可变NSData转为可变数据
NSData *tempData = [data subdataWithRange:NSMakeRange(sizeof(uint8_t), 10)];
NSMutableData *d1 = [NSMutableData dataWithData:tempData];

uint8_t i = 10;
// 补全右括号,修正语法错误
[d1 replaceBytesInRange:NSMakeRange(1, sizeof(uint8_t)) withBytes:&i];

内容的提问来源于stack exchange,提问作者user2515165

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:35:17