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

React Native MapView用SVG自定义Marker触发[NSNull doubleValue]报错

问题诱因
  • 变量名不匹配:声明状态时定义的变量为restaurant_Latitude、restaurant_Longitude(带下划线),但在Marker的coordinate参数中调用的是无下划线的restaurantLatitude、restaurantLongitude,变量实际为undefined,传到原生层后被解析为NSNull,原生尝试调用NSNull的doubleValue方法就触发了报错。
  • 异步方法调用缺漏:getFoodInfo是异步方法,你在async函数中调用时没有加await,拿到的是Promise对象而非实际的坐标数据,也会导致坐标赋值异常。
  • 接口返回值无空校验:如果client_instance.getFoodInfo()返回结果为空,或是其中的latitude、longitude字段为null/空值,直接赋值给状态后,会导致传入coordinate的参数为非数字类型,触发原生类型错误。
  • Marker参数非法:MapView要求Marker的coordinate属性仅接收latitude和longitude两个数字类型字段,你额外传入了未定义的error字段和position_error变量(你实际声明的错误变量为restaurantPositionError),非法参数会导致原生渲染异常。
  • 渲染时机错误:坐标还未正确获取时Marker就已经开始渲染,非法参数导致原生侧子节点渲染/移除逻辑异常,触发removedChildren count相关报错。
修复方案
  1. 修正变量名不匹配问题,保证状态声明和调用的变量名一致:
const [restaurantLatitude, setRestaurantLatitude] = useState(0)
const [restaurantLongitude, setRestaurantLongitude] = useState(0)
const [restaurantPositionError, setRestaurantPositionError] = useState(null)
  1. 补充异步方法的await关键字,同时增加接口返回值空校验,确保坐标为合法数字再赋值:
useEffect(() =>{
  const displayRestaurantInfo = async () =>{
    // 补充await关键字
    let restaurantInfo = await client_instance.getFoodInfo()
    // 新增空校验
    if(restaurantInfo && typeof restaurantInfo.latitude === 'number' && typeof restaurantInfo.longitude === 'number') {
      setRestaurantLatitude(restaurantInfo.latitude)
      setRestaurantLongitude(restaurantInfo.longitude)
      setRestaurantPositionError(null)
    } else {
      setRestaurantPositionError('获取餐厅坐标失败')
    }
  }
  displayRestaurantInfo()
// 补充useEffect依赖数组,避免重复执行
}, [])
  1. 清理Marker的非法参数,增加条件渲染逻辑,只有坐标合法时才渲染Marker:
return(
  <MapView>
    {/* 只有无报错且坐标不为初始值时才渲染Marker */}
    {!restaurantPositionError && restaurantLatitude !== 0 && restaurantLongitude !== 0 && (
      <Marker 
        coordinate={{
          latitude: restaurantLatitude,
          longitude: restaurantLongitude
        }}
      >
        <View>
          {restaurantIcon()}
        </View>
      </Marker>
    )}
  </MapView>
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:24:03