如何从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属性的支持一样