2

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

我知道 的identifier属性EKEvent是只读的,因此我想创建该类的子类,我可以在其中添加一个称为类似的附加属性myid并将事件的 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; 并且应用程序崩溃。所以我的问题本质上是我是否可以有效地对课程进行子EKEvent类化,如果可以,我在这里做错了什么?

提前致谢!

4

2 回答 2

16

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

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

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

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

于 2012-07-09T19:40:27.550 回答
2

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

试试这个:

SectureEvent *myEvent = [SectureEvent eventWithEventStore:eventDB];

于 2012-07-09T19:20:43.077 回答