如何从 CNContactStore 获取 RecordID ios
How to get RecordID from CNContactStore ios
这是我获取设备联系人并保存到 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];
}]
根据你的问题陈述,我的理解是你想 delete
一个 联系 来自通讯录 identifier
[=] 16=]接触。当您拥有 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];
}
如果您确实需要阅读 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
这是我获取设备联系人并保存到 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];
}]
根据你的问题陈述,我的理解是你想 delete
一个 联系 来自通讯录 identifier
[=] 16=]接触。当您拥有 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];
}
如果您确实需要阅读 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