【问题标题】:CNContactStore retrieve a contact by email addressCNContactStore 通过电子邮件地址检索联系人
【发布时间】:2015-09-29 04:46:18
【问题描述】:

我想使用联系人框架 (IOS 9) 来检索与电子邮件地址匹配的联系人。

任何帮助将不胜感激。 请目标C。 谢谢。

【问题讨论】:

标签: objective-c ios9


【解决方案1】:
  1. 添加 Contacts.framework
  2. #import <Contacts/Contacts.h>
  3. 写代码
-(void)loadContactList {
    CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
    if( status == CNAuthorizationStatusDenied || status == CNAuthorizationStatusRestricted)
    {
        NSLog(@"access denied");
    }
    else
    {
        //Create repository objects contacts
        CNContactStore *contactStore = [[CNContactStore alloc] init];
        //Select the contact you want to import the key attribute  ( https://developer.apple.com/library/watchos/documentation/Contacts/Reference/CNContact_Class/index.html#//apple_ref/doc/constant_group/Metadata_Keys )

        NSArray *keys = [[NSArray alloc]initWithObjects:CNContactIdentifierKey, CNContactEmailAddressesKey, CNContactBirthdayKey, CNContactImageDataKey, CNContactPhoneNumbersKey, CNContactViewController.descriptorForRequiredKeys, nil];

        // Create a request object
        CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys];
        request.predicate = nil;

        [contactStore enumerateContactsWithFetchRequest:request
                                                  error:nil
                                             usingBlock:^(CNContact* __nonnull contact, BOOL* __nonnull stop)
         {
             // Contact one each function block is executed whenever you get
             NSString *phoneNumber = @"";
             if( contact.phoneNumbers)
                 phoneNumber = [[[contact.phoneNumbers firstObject] value] stringValue];

             NSLog(@"phoneNumber = %@", phoneNumber);
             NSLog(@"givenName = %@", contact.givenName);
             NSLog(@"familyName = %@", contact.familyName);
             NSLog(@"email = %@", contact.emailAddresses);


             [contactList addObject:contact];
         }];

        [contactTableView reloadData];
    }

}

【讨论】:

  • 如何搜索一个名为“Johnny Appleseed”的联系人?
  • 如何检索名字为“John”的所有联系人?
  • @josh 你想替换 request.predicate = nil; with request.predicate = [CNContact predicateForContactsMatchingName:@"Johnny Appleseed"];
  • 谢谢,这很有帮助! @J3RM
  • 像魅力一样工作谢谢! .... 只是初级开发人员的一个参考点。对于“1. 添加 Contacts.framework”....您必须进入 .xcodeproj -> general -> Frameworks, Libraries, and Embedded Contents ...然后添加项目“Contacts.framework”(也可能是“ContactsUI .framework' 如果需要)...此示例中列出的变量 'contactList' 和 'contactTableView' 也是类范围变量,而不是框架的一部分,因此如果您只是尝试复制和粘贴,您可能会遇到错误。再次感谢@minjoongkim,很好的例子!
【解决方案2】:

老问题,但我偶然发现它也想这样做。分享如何在 iOS11 及更高版本上执行此操作。

NSString* emailAddress = @"John-Appleseed@mac.com";
//Create repository objects contacts
CNContactStore *store = [[CNContactStore alloc] init];

NSPredicate* predicate = [CNContact predicateForContactsMatchingEmailAddress:emailAddress];
NSArray* keysToFetch = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey];
NSError *error;
NSArray *contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keysToFetch error:&error];
if (error) {
       NSLog(@"error fetching contacts %@", error);
} else {
   for (CNContact *contact in contacts) {
       NSLog(@"%@", contact.givenName);
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多