首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问EKParticipant/EKAttendee中的电子邮件

访问EKParticipant/EKAttendee中的电子邮件
EN

Stack Overflow用户
提问于 2014-08-13 18:54:30
回答 3查看 1.3K关注 0票数 1

我想得到一个活动的参与者在EKEventKit的电子邮件地址。

我有以下代码:

代码语言:javascript
复制
if ( event.attendees.count > 0)
{
    NSArray *people = event.attendees;
    for(EKParticipant *person in people)
    {
        if ( person.participantType == EKParticipantTypePerson && person.URL.resourceSpecifier.length > 0)
        {
            NSString *dataString = [NSString stringWithFormat:@"event_id=%ld&name=%@&is_me=%d&email=%@&role=%@",event_id,person.name, person.isCurrentUser,person.URL.resourceSpecifier, @"attendee"];
            //<DO SOMETHING USEFUL WITH dataString>;
        }
    }
}

当我运行代码时,person将填充以下数据:

代码语言:javascript
复制
EKAttendee <0x17809acc0> {UUID = 4F657EA4-452A-412B-A9AA-FEC5551DC096; name = A. Real Person; email = realperson@therightdomain.com; status = 0; role = 0; type = 1}

如何访问电子邮件字段?

我试过(如上面所示)使用URL.resourceSpecifier,但这经常是一些奇怪的字符串,绝对不是电子邮件地址。

EN

回答 3

Stack Overflow用户

发布于 2014-08-13 20:48:03

EKParticipant对象的“描述”是排序的属性列表。我尝试了几种不同的方法将列表解析为包含键的东西:值对,但没有成功。所以我写了如下:

代码语言:javascript
复制
                            // This is re-useable code that converts any class description field into a dictionary that can be parsed for info
                    NSMutableDictionary *descriptionData = [NSMutableDictionary dictionary];
                    for (NSString *pairString in [person.description componentsSeparatedByString:@";"])
                    {
                        NSArray *pair = [pairString componentsSeparatedByString:@"="];
                        if ( [pair count] != 2)
                            continue;
                        [descriptionData setObject:[[pair objectAtIndex:1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] forKey:[[pair objectAtIndex:0]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
                    }

有了这个,我就可以得到电子邮件地址

代码语言:javascript
复制
    [descriptionData valueForKey:@"email"]
票数 2
EN

Stack Overflow用户

发布于 2014-09-13 19:30:03

我试图在"how to get ekevent EKparticipant email?"线程中回答同样的问题:

您需要做的是使用EKPrincipal:ABRecordWithAddressBook,然后从那里提取电子邮件。如下所示:

代码语言:javascript
复制
NSString *email = nil;
ABAddressBookRef book = ABAddressBookCreateWithOptions(nil, nil);
ABRecordRef record = [self.appleParticipant ABRecordWithAddressBook:book];
if (record) {
    ABMultiValueRef value = ABRecordCopyValue(record, kABPersonEmailProperty);
    if (value
        && ABMultiValueGetCount(value) > 0) {
        email = (__bridge id)ABMultiValueCopyValueAtIndex(value, 0);
    }
}

请注意,调用ABAddressBookCreateWithOptions是昂贵的,因此您可能希望每个会话只执行一次。

如果您无法访问记录,那么回到URL.resourceSpecifier上。

票数 1
EN

Stack Overflow用户

发布于 2018-07-03 09:12:44

在Swift 4中:

代码语言:javascript
复制
private static func getParticipantDescriptionData(_ participant: EKParticipant) -> [String:String] {
  var descriptionData = [String: String]()
  for pairString in participant.description.components(separatedBy: ";") {
    let pair = pairString.components(separatedBy: "=")
    if pair.count != 2 {
      continue
    }
    descriptionData[pair[0].trimmingCharacters(in: .whitespacesAndNewlines)] =
      pair[1].trimmingCharacters(in: .whitespacesAndNewlines)
  }
  return descriptionData
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25294011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档