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

React Native(iOS)集成Realm报错:unordered_map::at: key not found

React Native + Realm iOS端调用realm.write和realm.generate抛出unordered_map::at: key not found错误

我在学习React Native课程时,采用Realm做本地数据存储。Android端调用realm.write和realm.generate方法完全正常,但iOS端运行时抛出如下错误:

[Error: Exception in HostFunction: unordered_map::at: key not found]

环境依赖版本

  • macOS Ventura 13.4(Apple M1芯片)
  • XCode 14.3 (14E222b)
  • iPhone 12 模拟器(iOS 16.4,已尝试Apple和Rosetta模式)
  • 项目依赖:
    • "react-native-get-random-values": "^1.9.0"
    • "expo": "~48.0.15"

相关代码片段

function handleDepartureRegister() {
  try {
    // 省略部分代码

    realm.write(() => {
      realm.create('Historic', Historic.generate({
        user_id: user!.id,
        license_plate: licensePlate.toUpperCase(),
        description,
      }))
    });

    Alert.alert('Saída', 'Saída do veículo registrada com sucesso.');

    goBack();
  } catch (error) {
    console.log(error);

    Alert.alert(
      'Erro',
      'Não foi possível registrar a saída do veículo.'
    );

    // 省略部分代码
  }
}

已尝试的解决措施

  • 在ios目录下执行pod install
  • 删除并重新创建模拟器
  • 切换Apple/Rosetta模式运行模拟器
  • 重新安装expo-crypto并执行pod install

可能的解决方案

1. 检查Realm模型Historic的定义与generate方法

这个错误大多和Realm模型字段不匹配有关:

  • 确认Historic模型的所有必填字段(比如主键)都在generate方法中正确生成或传入,没有遗漏
  • 检查传入的字段类型是否和模型定义完全一致,比如模型中user_id是字符串类型,确保传入的user!.id确实是字符串而非其他类型
  • 查看Historic.generate方法内部是否有iOS端不兼容的逻辑,比如依赖了未正确初始化的随机数生成工具

2. 确保Realm实例已完全初始化

iOS端Realm初始化可能存在异步延迟,务必在Realm实例准备就绪后再执行写入操作。可以通过监听realm.isReady状态,或者在useEffect中等待初始化完成:

useEffect(() => {
  if (realm?.isReady) {
    // 执行需要操作Realm的逻辑
  }
}, [realm]);

3. 彻底清理iOS构建缓存

缓存问题是iOS端常见的坑,按以下步骤操作:

  1. 关闭模拟器和Metro服务
  2. 删除ios目录下的Pods文件夹和Podfile.lock文件
  3. 执行命令:cd ios && pod deintegrate && pod install
  4. 删除XCode的Derived Data:打开XCode -> 设置 -> 位置 -> Derived Data,点击路径打开文件夹后删除当前项目的缓存文件
  5. 重新启动Metro并构建项目

4. 确认Realm与Expo版本兼容

Expo 48对Realm版本有特定要求,检查项目中Realm版本是否和Expo 48兼容,若不匹配,尝试升级或降级至兼容版本

5. 确保react-native-get-random-values正确导入

如果Historic.generate中用到了随机值生成,确保在App入口文件最顶部导入react-native-get-random-values:

import 'react-native-get-random-values';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:53:21