EKParticipant в EventKit ошибочно возвращает NO для свойства isCurrentUser
Я пытаюсь определить, какой из участников 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 = [email protected]; 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 = [email protected]; isSelf = 1}
(lldb) print ekEvent.organizer.isCurrentUser
(BOOL) $16 = YES
Ответы
Ответ 1
Организатор события не по умолчанию в списке участников, вы явно добавляете его в качестве участников.
Организатор считается отличным от участников и изображен с помощью органайзера атрибутов. Если вы используете этот объект для доступа к isCurrentUser, он предоставит вам значение Да.
Если вы явно добавляете идентификатор электронной почты организатора в качестве участника, это считается другим пользователем, для этого вам нужно сравнить URL-адрес посетителей и проверить.
Пример: Пользователь a.. @a.com организовал встречу или мероприятие и предложил b.. @b.com
то у вас будет только b.. @b.com и.. @a.com будут доступны в качестве организатора.
Если вы добавили a.. @a.com в качестве участника, то тогда его свойство isCurrentUser равно No, и вы можете проверить, сравнив сам URL-адрес участников с организатором.
Ответ 2
Да, вы можете определить, какой участник ekevent является текущим пользователем.
Я нашел способ сделать работу isCurrentUser
для любого участника.
Согласно fooobar.com/info/194198/..., мы можем получить доступ к электронной почте с помощью EKParticipant.URL.resourceSpecifier
Хорошо, вы получите правильное письмо, ожидающее двух парней. Один из них - организатор, другой - текущий пользователь, который использует AppleID на этом устройстве. (Если событие является приглашением)
Когда вы обращаетесь к этим двум парням, их resourceSpecifier
это что-то вроде
/aMTA3MDAxMjE0MzEwNzAwMb6Y7GrNw2OCqzA8gkpxsctNZJxrzpebHm/principal/
не формат электронной почты.
UPDATE
Он работает для моего iPhone на 9.3.2.
Я могу различить, какой из них является текущим пользователем.
При разговоре с организатором мероприятия, если нет приглашенного, организатор будет равен нулю, это событие будет создано текущим пользователем, но organizer.isCurrentUser
будет NO
. Потому что organizer
nil
.
Когда пользователь приглашает некоторых других для участия в этом событии, organizer
будет не ноль, а его isCurrentUser
будет YES