EventKit 中的 EKParticipant 错误地为 isCurrentUser 属性返回 NO

Posted

技术标签:

【中文标题】EventKit 中的 EKParticipant 错误地为 isCurrentUser 属性返回 NO【英文标题】:EKParticipant in EventKit erroneously returns NO for isCurrentUser property 【发布时间】:2013-03-26 02:45:46 【问题描述】:

我正在尝试确定 EKEvent's 与会者 (EKPartipants) 中的哪一个是当前用户。在 ios6 中,EKParticipant 公开了一个名为 isCurrentUser 的属性

http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKParticipantClassRef/Reference/Reference.html#//apple_ref/occ/cl/EKParticipant

应该准确地提供这些信息。不幸的是,每次我查找 EKParticipant's isCurrentUser 属性时,它都会返回 NO,即使显然不是这样。

任何帮助将不胜感激!

更新结果:

如果您查找活动组织者,如果您是组织者,它会正确返回 isCurrentUser == YES。但是,如果您从与会者集中检索自己,它会返回 isCurrentUser == NO

控制台输出示例,其中两个不同的 EKParticipant 对象指代具有相同电子邮件地址的同一个人:

(lldb) po [ekEvent.attendees objectAtIndex:3]
$20 = 0x208c1220 EKAttendee <0x208c1220> UUID = CCD17C5E-FCB5-4BC9-8D9E-7E957B20025D;       
name= ----- -----; email = --------wa@me.com; status = 2; role = 0; type = 1

(lldb) print [(EKParticipant *)[ekEvent.attendees objectAtIndex:3] isCurrentUser]
(BOOL) $15 = NO

(lldb) po ekEvent.organizer
$19 = 0x20b720e0 EKOrganizer <0x20b720e0> UUID = FD0E434D-2C9F-4A6E-98DC-    
7FA6F27C3D1E; name = ----- -----; email = --------wa@me.com; isSelf = 1

(lldb) print ekEvent.organizer.isCurrentUser
(BOOL) $16 = YES

【问题讨论】:

这里有同样的问题...有什么新的吗?有什么方法可以从其他地方获取当前身份? 这种情况只发生在ios6还是7和8也发生? 【参考方案1】:

活动的组织者默认不在参加者列表中,您明确将他添加为参加者。

组织者被认为与参加者不同,并用属性组织者来描述。如果您使用该对象访问 isCurrentUser ,它将为您提供值 Yes。

如果您将组织者电子邮件 ID 明确添加为与会者,则将其视为不同的用户,因此您需要比较与会者 URL 并检查。

示例:用户 a..@a.com 组织了一次会议或活动并邀请了 b..@b.com 那么在参加者中,您将只有 b..@b.com 并且 a..@a.com 将作为组织者提供。

如果您也将 a..@a.com 添加为参加者,则其属性 isCurrentUser 为否,您可以通过将参加者 URL 字符串本身与组织者进行比较来检查。

【讨论】:

【参考方案2】:

是的,您可以确定 ekevent 的哪个参与者是当前用户。

我找到了一种让isCurrentUser 为任何参与者工作的方法。 根据https://***.com/a/17222036/3683845,我们可以通过EKParticipant.URL.resourceSpecifier获取与会者的电子邮件

嗯,你会收到正确的电子邮件,预计两个人。一个是组织者,另一个是在此设备上使用 AppleID 的当前用户。(如果活动是邀请)

当您访问这两个家伙时,他们的resourceSpecifier 类似于

/aMTA3MDAxMjE0MzEwNzAwMb6Y7GrNw2OCqzA8gkpxsctNZJxrzpebHm/principal/

不是电子邮件格式。

更新

它适用于我在 9.3.2 上的 iPhone。

我可以区分与会者中的当前用户。

当与活动组织者交谈时,如果没有被邀请者,组织者将为 nil,这意味着此活动是由当前用户创建的,但 organizer.isCurrentUser 将是 NO。因为organizernil

当用户邀请其他人参加此活动时,organizer 将不为零,其isCurrentUser 将为YES

【讨论】:

以上是关于EventKit 中的 EKParticipant 错误地为 isCurrentUser 属性返回 NO的主要内容,如果未能解决你的问题,请参考以下文章

自定义时区的 EventKit 问题

Swift EventKit的初学者指南–请求权限

iPhone 日历和时区 (EventKit)

使用 EventKit 对 iOS 日历进行文本搜索

UILocalNotification 或 EventKIt

将 EventKit 事件与远程数据库同步