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

28

我正在尝试确定一个 EKEvent 的出席者 (EKPartipants) 中哪个是当前用户。在 iOS6 中,EKParticipant 公开了一个名为 isCurrentUser 的属性,该属性应该提供这个信息。不幸的是,每次查询 EKParticipant 的 isCurrentUser 属性时,即使明显不是这种情况,它也返回 NO。

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

任何帮助将不胜感激!

更新发现:

如果您查找事件组织者,则返回正确的 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

这里也有同样的问题... 有什么新的进展吗?有没有办法从其他地方获取当前标识? - Fernando Mazzon
这只发生在iOS6中还是在7和8中也会发生? - slf
2个回答

1

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

我发现了一种方法,使isCurrentUser适用于任何参与者。 根据https://dev59.com/Z2Yr5IYBdhLWcg3wfKL_#17222036,我们可以使用EKParticipant.URL.resourceSpecifier获取与会者的电子邮件。

好吧,您将获得正确的电子邮件,除了两个人。一个是组织者,另一个是在此设备上使用AppleID的当前用户。(如果事件是邀请)

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

/aMTA3MDAxMjE0MzEwNzAwMb6Y7GrNw2OCqzA8gkpxsctNZJxrzpebHm/principal/

而不是电子邮件格式。

更新

它适用于我的iPhone 9.3.2。

我可以区分哪一个是与会者中的当前用户。

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

1

该事件的组织者默认不在参与者名单中,您需要明确将其作为参与者添加。

组织者与参与者被认为是不同的,并用属性“organiser”表示。如果您使用该对象来访问isCurrentUser,则会提供值“Yes”。

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

例如:用户a..@a.com组织了一个会议或活动,并邀请b..@b.com。然后在参与者名单中,您只会看到b..@b.com, 而a..@a.com将作为组织者出现。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接