我一直在应用程序中使用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中,并将其用作数据源。
Appointment
,并且添加任何内容都会将它们放入相应的AppointmentWeek
B)在使用tableview加载屏幕后,获取所有约会或其中的一部分,按照适当的开始和结束日期对它们进行分组,并创建一个AppointmentsInWeek
结构用作数据源。
AppointmentsInWeek
将始终保持最新,因为它是根据需要随时创建的我从选项B 开始,但我现在想的是,使用选项A 可能会更好。如果我这样做,最大的问题是确保在添加新约会时,Realm始终是最新的。
Appointments
以及添加(或更改)一个类时,是否有意义将其添加到相应的AppointmentWeek
?答案 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 properties,list properties和linking objects properties的某种组合来模拟AppointmentsInWeek
和Appointment
之间的关联。具体如何实现这取决于您的应用程序的具体需求,但这是一种可能性:
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。