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

我知道identifierEKEvent属性是只读的,因此我想创建该类的子类的原因是,我可以在其中添加诸如myid之类的附加属性并存储事件的ID(来自服务器的ID)在事件存储中使用它。我试图创建一个子类,并且一切似乎都能正常工作并编译,但是在运行时,当我尝试设置要添加到子类中的额外eventid比例时,会出现错误,错误消息为:

 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不能被子类化。事件工具包对象用于表示数据库记录。创建EKEvent的子类不会神奇地在Event Kit数据库中插入新字段,也不会将EKEvent强制转换为其他对象来神奇地更改该对象的类。

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

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

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

关于iphone - 正确地子类化EKEvent类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11401309/

10-10 12:51