正确地继承EKEvent类

时间:2012-07-09 18:56:50

标签: iphone objective-c ios ios4 eventkit

我在对EKEvent类进行子类化时遇到了一些麻烦。方案是这样的,我使用Web服务从外部数据库中提取所有事件,因此所有事件都带有ID。然后,我想将这些事件放入设备日历中,然后再检索它们。问题是,当我检索事件时,我需要它与服务器上的事件具有相同的ID,因此我可以快速查找以获取有关事件的其他信息。

我知道identifier的{​​{1}}属性是只读的,因此我想创建类的子类,我可以在其中添加一个名为{{1}的附加属性并在事件存储中存储事件的id(来自服务器的id)。我试图创建一个子类,一切似乎工作正常并编译,但在运行时我得到一个错误,当我尝试设置我在子类中添加的额外的偶数比例,错误消息是:

EKEvent

这是我用来从myid子类创建事件的一些测试代码:

 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; 类,那么我的问题就是如此,那么我在这里做错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:15)

EKEvent并不意味着是子类。 Event Kit对象用于表示数据库记录。创建EKEvent的子类不会神奇地在Event Kit数据库中插入新字段,也不会将EKEvent转换为其他东西神奇地改变该对象的类。

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

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

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

答案 1 :(得分:2)

创建EKEvent并将其作为SectureEvent投射与创建SectureEvent不同。

试试这个:

SectureEvent *myEvent = [SectureEvent eventWithEventStore:eventDB];