我应该为自定义分组创建单独的Realm对象吗?

时间:2017-04-07 12:45:10

标签: swift realm

我一直在应用程序中使用Realm并喜欢它。谢谢!我有一个问题,我想由你们大家管理并获得一些建议。

假设您有一个包含日期字段的领域对象(简化示例):

class Appointment: Object {

    dynamic var type = ""
    dynamic var date = Date()
}

现在,假设您已经保存了数千个约会,并且您将在tableview或collectionview上显示这些约会,例如按周分组。因此,您的视图的数据源将是这样的。

struct AppointmentsInWeek {
    var startDate: Date?
    var endDate: Date?
    var appointments: [Appointment]
}

所以,我有两个选择,我正在考虑各种利弊: A)使AppointmentsInWeek成为Object的子类,将其保存在Realm中,并将其用作数据源。

优点:
  • 表的数据将从Realm
  • 延迟加载
  • 目前需要使用简单。
缺点:
  • 保持最新状态似乎是一个挑战。我可能会看到一些可观察到的,可以看到Realm中的Appointment,并且添加任何内容都会将它们放入相应的AppointmentWeek

B)在使用tableview加载屏幕后,获取所有约会或其中的一部分,按照适当的开始和结束日期对它们进行分组,并创建一个AppointmentsInWeek结构用作数据源。

优点:
  • AppointmentsInWeek将始终保持最新,因为它是根据需要随时创建的
缺点:
  • 我们必须将所有这些保留在记忆中,限制我们可以实时显示的约会数量。

我从选项B 开始,但我现在想的是,使用选项A 可能会更好。如果我这样做,最大的问题是确保在添加新约会时,Realm始终是最新的。

问题

  1. 我还没有考虑其他选择吗?
  2. 哪个听起来更合适?
  3. 假设我选择了A,那么在应用程序的整个生命周期中都有一个类,负责观察Realm中的Appointments以及添加(或更改)一个类时,是否有意义将其添加到相应的AppointmentWeek

1 个答案:

答案 0 :(得分:1)

两种选择都很好,但我建议选项A.有几种方法可以选择方法A.

首先,您不需要手动同步 Exception: [Microsoft][ODBC Microsoft Access Driver] The Microsoft Office Access database engine cannot find the input table or query 'MoviesAc'. Make sure it exists and that its name is spelled correctly. Appointment。您可以使用object propertieslist propertieslinking objects properties的某种组合来模拟AppointmentsInWeekAppointment之间的关联。具体如何实现这取决于您的应用程序的具体需求,但这是一种可能性:

AppointmentsInWeek

第二种可能性是根本不使用关系,而是使用查询。 Realm通过Results类支持查询。您可以在class Appointment : Object { dynamic var type = "" dynamic var date = NSDate() // Link to the week this appointment lives in, if desired var week: AppointmentsInWeek? = nil } class AppointmentsInWeek : Object { dynamic var startDate = NSDate() dynamic var endDate = NSDate() // Add appointment to List whenever it's created let appointments = List<Appointment>() } 类上添加一个被忽略的属性,该属性会查询Realm以查找属于其日期范围的所有约会:

AppointmentsInWeek

在任何一种情况下,Realms,lists和results都会在它们所在的线程(通常是主线程)的runloop运行时自动更新。如果您需要手动对更改做出反应,Realm还支持各种notifications