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

React-Native地图聚类重渲染崩溃:iOS报key不能为nil错误

解决iOS端地图聚类组件崩溃问题

出现-[__NSDictionaryM setObject:forKeyedSubscript:]: key cannot be nil错误,是因为原生层处理字典时使用了nil作为key,结合你的场景,可按以下步骤排查修复:

  • 确保标记点的key绝对非空且唯一
    代码中标记点的key依赖item?.id,如果存在item的id为nil的情况,会导致key为空。修改key的生成逻辑,兜底处理空值:

    key={item?.id ?? `${item?.lat}-${item?.long}-${Date.now()}`}
    

    或者提前过滤掉无id且坐标无效的item,保证每个标记都有唯一非空的key。

  • 移除shouldRasterizeIOS属性
    该属性会让iOS将地图栅格化,在地图移动、缩放或标记点更新时,可能与聚类组件的动态渲染逻辑冲突,引发原生层错误。先移除该属性,测试崩溃是否消失。

  • 检查CustomMarker内部逻辑
    确认CustomMarker组件中是否存在传递给原生层的空值key,比如自定义的标识属性、原生组件所需的必填字段,确保这些字段都不为nil。

  • 保证数据更新的稳定性
    过滤或修改data数组时,始终返回新数组引用(比如用filter、map),不要直接修改原数组。这样React能正确识别数据变化,避免聚类库处理新旧数据时出现状态混乱。

  • 验证坐标有效性
    确保每个item的lat和long都是有效数字,避免转换后出现NaN:

    coordinate={{
      latitude: !isNaN(Number(item?.lat)) ? Number(item?.lat) : 0,
      longitude: !isNaN(Number(item?.long)) ? Number(item?.long) : 0,
    }}
    

    或者提前过滤掉坐标无效的item,不渲染这类标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:09:46