Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从CNContactStore ios获取RecordID_Ios_Objective C_Iphone_Cncontact_Cncontactstore - Fatal编程技术网

如何从CNContactStore ios获取RecordID

如何从CNContactStore ios获取RecordID,ios,objective-c,iphone,cncontact,cncontactstore,Ios,Objective C,Iphone,Cncontact,Cncontactstore,这是我获取设备联系人并保存到MutableArray的代码 但是我需要单独获取所有联系人的记录ID,并保存到同一数组中以供进一步使用。(例如,使用recordId删除联系人) 请帮帮我,我被困在那里四天了 [contactStore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact* __nonnull contact, BOOL* __nonnull stop){ if(

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

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

请帮帮我,我被困在那里四天了

[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];
      }]

从您的问题陈述中,我了解到您希望根据联系人的标识符从联系人簿中删除联系人。当您拥有
标识符时,您只需执行以下操作:

- (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];
}

如果您确实需要读取
recordID
(对于旧API),请使用这个简单的扩展

recordID
始终获取

此代码永远不会提交到应用商店。它使用私有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

你被困在哪里?你不能做什么?您所说的“保存到同一数组以供进一步使用”是什么意思?我想删除选定的联系人。你知道如何删除选定的联系人吗?请看下面我的答案。我已经亲自验证了这段代码,它的工作非常完美。谢谢Adeel,它的工作非常完美。你能告诉我如何合并重复的联系人吗?当然可以@inderpalingh。我建议你为此提出一个新问题,因为这会偏离这篇文章的主题。您可以在评论中添加新问题的链接。这是链接@Adeel您在iOS 11 beta版上使用过它吗?,在iOS 11上的CNContact对象上使用valueForKey:@“recordID”崩溃,并给出消息“该类不符合key recordID的键值编码”。就好像苹果放弃了对ABAddressBook属性的支持一样