我在将EKEvent
类归类时遇到了一些麻烦。情况就是这样,我要使用Web服务从外部数据库中提取所有事件,因此所有事件都带有一个ID。然后,我想将这些事件放入设备日历中,并在以后检索它们。问题是,当我检索事件时,我需要它具有与服务器上的事件相同的ID,以便快速查找以获取有关事件的其他信息。
我知道identifier
的EKEvent
属性是只读的,因此我想创建该类的子类的原因是,我可以在其中添加诸如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/