正确地继承EKEvent类

问题描述:

我一直在subclasslassing EKEvent类有点麻烦。场景是这样的,我使用web服务从外部数据库中提取所有事件,所有事件都带有一个ID。然后我想将这些事件放入设备日历中,稍后再检索它们。问题是,当我检索事件时,我需要它与服务器上的事件具有相同的ID,所以我可以快速查找以获取事件的其他信息。正确地继承EKEvent类

我知道的EKEventidentifier属性为只读,所以我要创建的类的子类,我可以添加一个名为东西一个附加属性像myid和存储事件ID的原因(一从服务器)与它在事件库中。我试图创建一个子类,一切似乎正常工作和编译,但在运行时我得到一个错误,当我尝试设置额外的事件ID proporty我在子类中添加,该错误信息是:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[EKEvent setEventId:]: unrecognized selector sent to instance 0x83c0770' 

这是一些测试代码,我用它来从我EKEvent子类创建事件:

SectureEvent *myEvent = (SectureEvent*)[EKEvent eventWithEventStore:eventDB]; 
myEvent.title  = self.evento; 
myEvent.startDate = [[NSDate alloc] init]; 
myEvent.startDate = [NSDate date]; 
myEvent.endDate = [[NSDate alloc] init]; 
myEvent.endDate = [[NSDate alloc] init]; 
myEvent.allDay = YES; 
myEvent.eventId = self.eventId; 

最后一行myEvent.eventId = self.eventId; 和应用程序崩溃时出现错误。所以我的问题essentailly,如果我可以有效地继承EKEvent类,如果是的话,我在这里做错了什么?

在此先感谢!

EKEvent并不意味着被继承。 Event Kit对象用于表示数据库记录。创建EKEvent的子类不会在事件工具包数据库中奇迹般地插入新字段,也不会将EKEvent强制转换为别的东西,从而奇迹般地更改该对象的类。

将额外字段存储到数据库中的唯一方法是直接访问该数据库,Apple为自己保留该数据库。

由于无法将新字段添加到Event Kit数据库,因此您可以使用现有字段(例如,在事件的注释中添加事件ID),也可以使用由应用程序管理的第二个数据库对其进行扩展。

只需创建一个将您的事件ID与EKEvent标识符相关联的SQLite数据库(或属性列表文件或任何您想要的格式)即可。

+0

这绝对是正确答案! – 2012-07-09 19:48:36

+0

好吧,我想我会用SQLite解决方案。感谢您的解释! – Sparq 2012-07-09 19:57:58

+0

谢谢,应该清楚:) – 2015-11-05 08:51:21

创建EKEvent并将其转换为SectureEvent与创建SectureEvent不同。

试试这个:

SectureEvent *myEvent = [SectureEvent eventWithEventStore:eventDB];

+0

感谢您的工作,并避免了崩溃,但我有问题从事件存储中检索事件。当我使用谓词从事件存储中获取事件并将它们放入数组中时,我是否有可能实现我想要做的事情,它们是EKEvent,它们缺少额外的ID属性,您能否想到解决方法? – Sparq 2012-07-09 19:28:28

+0

拥有OO解决方案通常是可取的,但需要一些工作才能得到您想要的。我建议仅使用EKEvents和关联数组(或根据预期事件数量的数据库)将服务器中的ID与事件的ID进行配对。 – jtomschroeder 2012-07-09 19:42:21

+0

感谢您的快速响应和帮助!投票! – Sparq 2012-07-09 19:59:24