如何从CNContactStore ios获取RecordID

时间:2016-11-14 09:39:51

标签: ios objective-c iphone cncontact cncontactstore

这是获取设备联系人并保存到MutableArray的代码。

但我需要单独为所有联系人获取recordID并保存到同一个数组中以供进一步使用。 (例如,使用recordId删除联系人)。

请帮助我,我已经坚持了4天。

[contactStore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact* __nonnull contact, BOOL* __nonnull stop){
           if( contact.phoneNumbers)
                phoneNumber = [[[contact.phoneNumbers firstObject] value]];
           if( contact.emailAddresses)
                emailAddress = [[contact.emailAddresses firstObject] value];
           contactValue=[[NSMutableDictionary alloc] init];               
                [contactValue setValue:phoneNumber ?:@"" forKey:@"phoneNumber"];
                [contactValue setValue:emailAddress ?:@"" forKey:@"emailAddress"];
                [contactValue setObject:contact.identifier forKey:@"phoneIdentifier"];
                [contactValue setObject:contact.givenName ?:@"" forKey:@"firstName"];
                [contactValue setObject:contact.familyName ?:@"" forKey:@"lastName"];

           [_totalContact addObject:contactValue];
      }]

2 个答案:

答案 0 :(得分:4)

从您的问题陈述中我理解的是,您希望根据该联系人的delete从联系簿中identifier 联系 。当你拥有identifier时,这就是你需要做的全部:

- (void)deleteContactWithIdentifier:(NSString *)identifier {

    NSArray *keys = @[CNContactGivenNameKey,
                      CNContactPhoneNumbersKey,
                      CNContactEmailAddressesKey,
                      CNContactIdentifierKey];
    CNMutableContact *contact = [[store unifiedContactWithIdentifier:identifier keysToFetch:keys error:nil] mutableCopy];
    NSError *error;
    CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
    [saveRequest deleteContact:contact];
    [store executeSaveRequest:saveRequest error:&error];
}

答案 1 :(得分:1)

如果您确实需要阅读recordID(旧API),请使用此简单扩展程序。

recordID总是被抓住。

此代码永远不会提交到App Store。它使用私有API!

CNContact+PrivateExtension.h

NS_ASSUME_NONNULL_BEGIN

@interface CNContact (PrivateExtension)

@property (readonly) NSNumber *privateRecordID;

@end

NS_ASSUME_NONNULL_END

CNContact+PrivateExtension.m

@implementation CNContact (PrivateExtension)

- (NSNumber *)privateRecordID
{
    return [self valueForKey:@"recordID"];
}

@end