【问题标题】:Realm list property not saving data领域列表属性不保存数据
【发布时间】:2018-09-19 09:20:34
【问题描述】:

我有两个模型,我们称它们为 Schools 和 Teachers。型号如下

@objcMembers public class Schools : Object {


dynamic var   Id : String = ""
dynamic var   UserId : Int64 = 0
dynamic var   Name : String? = ""
dynamic var   listTeachers : List<Teachers>? =  nil
dynamic var   teachersList : [Teachers]? =  []
   }



@objcMembers public class Teachers : Object {


dynamic var   Id : String = ""
dynamic var   UserId : Int64 = 0
dynamic var   Name : String? = ""


   }

现在在保存数据之前,我将 Teachers 对象(列表)放入 School 对象中,然后将该 School 对象保存在领域写入闭包中。

之后我只获得了 School 领域对象,当我获得 Teachers 列表时,它总是为零。什么情况?

我是否遗漏了什么或遗漏了什么来理解真正的 LIST 属性?

请帮忙

更新:这就是我获取对象的方式

let mSavedItems = mDbHelper.realmObj.objects(Schools.self)

if let teachers = mSavedItems[0].teachersList{// here teacher list is nil
  } 

【问题讨论】:

  • 你能提供你如何访问对象并返回 nil 吗?
  • @Tobi 问题已更新。请检查
  • 在 mDbhelper 中您是否正在创建一个领域实例并在 realmObj 中使用它?

标签: ios iphone swift realm realm-list


【解决方案1】:

您的Schools 声明有缺陷。您不应将List 声明为动态或可变的,也不应将其设为Optional。正如docs 明确指出的那样,let listTeachers = List&lt;Teachers&gt;() 是声明多对多关系的正确方法。

Realm 也不支持存储Array 类型的属性,因此您应该删除teachersList : [Teachers]? 属性。

@objcMembers public class Schools : Object {
    dynamic var   Id : String = ""
    dynamic var   UserId : Int64 = 0
    dynamic var   Name : String? = ""
    let listTeachers = List<Teachers>()
}

【讨论】:

  • 我是 iOS 和 swift 等的新手,但我在某处读到我们无法操纵 let 值,因为它将是常量
  • @Androidteem 是的,let 表示声明属性不可变,但由于 Listclass 并因此是引用类型,您仍然可以修改其属性(在这种特定情况下为元素) ,您就是无法更改列表的引用,无论如何这样做几乎没有意义。由于这个原因,几乎在所有情况下,您都应该将List 声明为不可变的。如果您是 Swift 新手,阅读 Realm 文档以及 Swift Language Guide 会更有意义
  • @Androidteem 我不知道我是怎么错过的,这是您的案例的正确答案,列表
  • @DávidPásztor 感谢您的回答。但是你能告诉我在列表中存储项目然后从列表中获取这些项目的方式吗?请分享此代码,谢谢
  • 天哪,我明白了。所以我们可以很容易地在其中设置值,它会起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多