我有一个SQLite数据库存储我的所有日历事件,模仿如下:
TimerEvent
*Attributes
-date
-dateForMark
-reminder
*Relationships
-eventInfo (<->)
EventInfo
*Attributes
-location
-notes
-recurringKey
-reminderKey
-title
*Relationships
-timerEvent (<->)
-repeat (<->>)
Repeat
*Attributes
-repeatDate
*Relationships
-eventInfo(<->>)
创建事件时,会创建一个TimerEvent,并插入三个日期值 . 然后,创建与EventInfo实体的关系,插入事件的位置, Headers ,注释和提醒/重复键 . 如果重复键不是-1,重复实体是根据TimerEvent日期和用户输入确定的日期之间的重复日期数创建的 .
我的日历比读取所有日期,显示它们,然后在我的AgendaView中可以显示来自“父”实体的所有信息(EventInfo不是重复的父实体 . 它只与一对多的关系与可以创造的许多重复) . 编辑时会出现问题...如果我想编辑其中一个重复事件,只编辑该事件(不是后面的那个,或之前的那个),我将Repeat对象追溯到EventInfo对象,更改该信息会改变每个事件的信息 . 我只能想象两个解决方案:
1. Add extra NSString attributes to repeat events for when events are edited
2. Create a new event JUST for that object, nullify the existing relationship,
and use the repeatDate as the main date.
2 回答
我会将重复事件拉出到EventInfo表中的单个事件,同时使用重复表来跟踪所有事件 . 因此,重复表处理有关所有重复事件的公共信息,同时为重复事件的每个实例创建单独的EventInfo记录 . 如下
活动信息
第1项 - 不再重复
第2项 - 重复(重复ID 1)
第3项 - 重复(重复ID 1)
第4项 - 重复(重复ID 2)
第5项 - 重复(重复ID 2)
第6项 - 不再重复
重复
重复1 - 重复常用信息
重复2 - 重复常用信息
通过为每个重复事件创建一个单独的
TimerEvent
来解决自己的EventInfo
,为TimerEvent
添加了一个repeatID
属性,添加了一个搜索repeatID
's in order to get all of those associated to the current event. The ID',这是从一个新的NSUserDefault
密钥生成的,每当一个新的重复事件发生时就会分配和递增创建 .