Flutter Realm更新嵌套嵌入式对象时iOS应用崩溃求助
Flutter Realm更新嵌套嵌入式对象时iOS应用崩溃求助
各位大佬好,我在Flutter项目里用Realm存储复杂的嵌套数据,第一次插入完全没问题,但第二次用相同JSON结构更新时,iOS端直接崩溃了,折腾好久没找到原因,来求助大家!
问题重现步骤
- 将JSON转换为Realm模型对象
- 调用
realm.writeAsync,通过realm.addAll([object], update: true)写入数据 - 重复上述两步,使用完全相同的JSON数据
- 第二次执行时iOS应用直接崩溃
环境信息
- Realm版本:
^20.1.1 - Flutter版本:
3.32.2 - Dart版本:
3.8.1 - iOS系统版本:
18.3 - 使用本地Realm实例,所有iOS设备/系统均出现相同问题
数据规模说明
我插入的嵌套对象包含:
listOfConfigM:2条记录activeConfig:总计38条记录(分布在所有listOfConfigM中)paramsActive:总计629条记录(分布在所有activeConfig中)
Realm模型定义
@RealmModel() class $ConfigurationSchema { @PrimaryKey() late String name; late ConfigurationType? configType; late DateTime? lastModified; late DateTime? lastUpdated; } @RealmModel(ObjectType.embeddedObject) class $ConfigurationType { late String? type; late MyConfituration? myConfiguration; } @RealmModel(ObjectType.embeddedObject) class $MyConfituration { late List<$ConfigM> listOfConfigM; } @RealmModel(ObjectType.embeddedObject) class $ConfigM { late String id; late String? name; late List<$ActiveConfig> activeConfig; } @RealmModel(ObjectType.embeddedObject) class $ActiveConfig { late String id; late String? name; late String? type; late List<$PararamActive> paramsActive; } @RealmModel(ObjectType.embeddedObject) class $PararamActive { late String id; late String? name; late RealmValue value; }
示例JSON数据
{ "name": "simpleConfig", "configType": { "type": "myConfiguration", "myConfiguration": { "listOfConfigM": [ { "id": "1", "name": "Config1", "activeConfig": [ { "id": "1.1", "name": "ActiveConfig1", "type": "TypeA", "paramsActive": [ { "id": "1.1.1", "name": "Param1", "value": { "stringValue": "Value1" } }, { "id": "1.1.2", "name": "Param2", "value": false }, { "id": "1.1.3", "name": "Param3", "value": ["hello", "world"] } ] } ] }, { "id": "2", "name": "Config2", "activeConfig": [ { "id": "2.1", "name": "ActiveConfig2", "type": "TypeB", "paramsActive": [ { "id": "2.1.1", "name": "Param2", "value": 0 } ] } ] } ] } }, "lastModified": "2025-06-12T08:30:00.000Z", "lastUpdated": "2025-06-12T08:30:00.000Z" }
插入/更新代码片段
var confMap = jsonDecode(simpleConfigJson); var configurationSchema = ConfigurationSchema( name: confMap['name'], configType: ConfigurationType( type: confMap['configType']['type'], myConfiguration: MyConfituration( listOfConfigM: (confMap['configType']['myConfiguration']['listOfConfigM'] as List) .map((item) => ConfigM( id: item['id'], name: item['name'], activeConfig: (item['activeConfig'] as List) .map((activeItem) => ActiveConfig( id: activeItem['id'], name: activeItem['name'], type: activeItem['type'], paramsActive: (activeItem['paramsActive'] as List) .map((param) => PararamActive( id: param['id'], name: param['name'], value: RealmValue.fromJson(param['value']) )).toList() )).toList() )).toList() ), lastModified: DateTime.parse(confMap['lastModified']), lastUpdated: DateTime.parse(confMap['lastUpdated']) ); realm.writeAsync(() { realm.addAll([configurationSchema], update: true); });
预期结果
- 第一次插入成功存储数据
- 第二次用
update: true执行时,应该更新已有对象,而非崩溃
我怀疑崩溃和对象的大小或者嵌套结构有关,但实在找不到具体原因,有没有遇到过类似问题的大佬给点思路?
内容来源于stack exchange




