正确地继承了EKEvent类(Properly subclassing the EKEvent Cl

2019-10-16 23:08发布

我一直有一个有点麻烦sublclassing的EKEvent类。 该方案是这样的,我使用的是web服务拉动从外部数据库我所有的事件,因此,所有的事件都与一个ID。 然后,我希望把这些事件到设备的日历和以后检索。 问题是,当我重新找回事件我需要它具有相同的ID作为服务器上的事件,所以我可以做一个快速的查找来获得对事件的其他信息。

我知道的identifier的属性EKEvent是只读的,所以我要创建的类的子类,我可以添加一个名为像一个附加属性的原因myid和存储事件的ID(一个从服务器)它在eventstore。 我试图创建一个子类,一切似乎正常工作和编译,但在运行时我得到一个错误,当我尝试设置额外的事件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类如果有什么我错在这里做什么?

提前致谢!

Answer 1:

EKEvent并不意味着被继承。 事件Kit对象被用来代表数据库记录。 创建的子类EKEvent不会奇迹般地插入在事件套件数据库中的新领域,也将铸造EKEvent别的东西奇迹般地改变对象的类。

额外域存储到数据库的唯一方法是让该数据库,苹果公司储量为自己的直接访问。

正如你不能添加新的字段到事件套件数据库,您可以使用现有的字段(例如,在事件的音符添加事件ID)或由应用程序管理的第二个数据库扩展它。

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



Answer 2:

创建EKEvent和铸造它作为一个SectureEvent是不一样的创建SectureEvent。

尝试这个:

SectureEvent *myEvent = [SectureEvent eventWithEventStore:eventDB];



文章来源: Properly subclassing the EKEvent Class