RealmSwift中realm.write无法保存新Item项,如何修复?
问题排查与修复步骤
1. 确认selectedCategory是否有效
闭包内代码完全未执行(包括print无输出),大概率是selectedCategory为nil,导致if let currentCategory = self.selectedCategory分支未进入。
- 临时添加调试代码:在
if let语句前加入print("selectedCategory status: \(self.selectedCategory == nil ? "nil" : "valid")"),运行后查看控制台输出,确认是否进入分支。 - 检查
selectedCategory的赋值逻辑:比如是否在分类选择操作(如TableView的didSelectRowAt方法)中正确将选中的Category实例赋值给selectedCategory,是否存在赋值后被意外置空的情况。
2. 验证Realm实例与对象模型的正确性
若确认selectedCategory有效,再检查以下内容:
- Realm实例初始化:确保
self.realm是在当前线程正确初始化的(Realm对象线程绑定,跨线程使用会导致写入失败或报错),标准初始化示例:let realm = try! Realm() - 对象模型定义:确保需要持久化的属性使用
@Persisted标注,且Category与Item的关联关系正确:// Category类示例 class Category: Object { @Persisted var name: String = "" @Persisted var items: List<Item> = List() // 关联Item列表 } // Item类示例 class Item: Object { @Persisted var title: String = "" @Persisted var dateCreated: Date = Date() }
3. 优化代码稳定性(可选)
避免强制解包textField.text!,改用可选绑定防止潜在崩溃,同时增加分支提示:
if let currentCategory = self.selectedCategory, let itemTitle = textField.text, !itemTitle.isEmpty { do { try self.realm.write { let newItem = Item() newItem.title = itemTitle newItem.dateCreated = Date() currentCategory.items.append(newItem) print(newItem.title) // 此时应正常输出 } } catch { print("Error saving new items, \(error)") } } else { print("selectedCategory is nil or input is empty") }
内容的提问来源于stack exchange,提问作者Eshita
相关产品推荐
相关产品推荐

