gpt4 book ai didi

ios - 地址簿 UI 框架弃用的方法

转载 作者:可可西里 更新时间:2023-11-01 03:39:43 24 4
gpt4 key购买 nike

我正在处理一个现有的 objective c 项目,在阅读适用于 iOS 的地址簿 UI 框架引用时,我发现以下类在 iOS 9 中已弃用。( ABUnknownPersonViewController , ABPersonViewController , ABPeoplePickerNavigationController, ABNewPersonViewController )这个 . 的替代品是什么?我在哪里可以找到一些与此相关的文档。任何帮助表示赞赏。提前致谢。

最佳答案

AddressBookUI 框架已在 iOS 9 中弃用,因此您最好使用 ContactsUI 框架。

它有很多新特性,包括AddressBookUI框架的所有特性。

因此,如果您专门针对 iOS 9,那么您应该选择 ContactsUI 框架。

要检查 AddressBookUI 框架是否适用于特定的 iOS 版本,您可以执行以下操作:

if ([CNContactStore class]) {
CNContactStore *store = [CNContactStore new];
//...
} else {
// Fallback to old framework
}

完整代码如下:

- (void) contactScan
{
if ([CNContactStore class]) {
//ios9 or later
CNEntityType entityType = CNEntityTypeContacts;
if( [CNContactStore authorizationStatusForEntityType:entityType] == CNAuthorizationStatusNotDetermined)
{
CNContactStore * contactStore = [[CNContactStore alloc] init];
[contactStore requestAccessForEntityType:entityType completionHandler:^(BOOL granted, NSError * _Nullable error) {
if(granted){
[self getAllContact];
}
}];
}
else if( [CNContactStore authorizationStatusForEntityType:entityType]== CNAuthorizationStatusAuthorized)
{
[self getAllContact];
}
}
}

-(void)getAllContact
{
if([CNContactStore class])
{
//iOS 9 or later
NSError* contactError;
CNContactStore* addressBook = [[CNContactStore alloc]init];
[addressBook containersMatchingPredicate:[CNContainer predicateForContainersWithIdentifiers: @[addressBook.defaultContainerIdentifier]] error:&contactError];
NSArray * keysToFetch =@[CNContactEmailAddressesKey, CNContactPhoneNumbersKey, CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPostalAddressesKey];
CNContactFetchRequest * request = [[CNContactFetchRequest alloc]initWithKeysToFetch:keysToFetch];
BOOL success = [addressBook enumerateContactsWithFetchRequest:request error:&contactError usingBlock:^(CNContact * __nonnull contact, BOOL * __nonnull stop){
[self parseContactWithContact:contact];
}];
}
}

- (void)parseContactWithContact :(CNContact* )contact
{
NSString * firstName = contact.givenName;
NSString * lastName = contact.familyName;
NSString * phone = [[contact.phoneNumbers valueForKey:@"value"] valueForKey:@"digits"];
NSStrubg * email = [contact.emailAddresses valueForKey:@"value"];
NSArray * addrArr = [self parseAddressWithContac:contact];
}

- (NSMutableArray *)parseAddressWithContac: (CNContact *)contact
{
NSMutableArray * addrArr = [[NSMutableArray alloc]init];
CNPostalAddressFormatter * formatter = [[CNPostalAddressFormatter alloc]init];
NSArray * addresses = (NSArray*)[contact.postalAddresses valueForKey:@"value"];
if (addresses.count > 0) {
for (CNPostalAddress* address in addresses) {
[addrArr addObject:[formatter stringFromPostalAddress:address]];
}
}
return addrArr;
}

只需确保您请求允许从设备读取联系人。

引用链接:https://gist.github.com/willthink/024f1394474e70904728

Updated:

要替换 AddressBookUI,您需要使用 CNContactPickerViewController。您可以检查可用于一次接听一个或多个联系人的委托(delegate)方法。

这将呈现一个包含所有联系人的内置 UIViewController,您需要实现它的委托(delegate)方法!

To select one contact:

contactPicker:didSelectContact:

To select multiple (New Feature):

contactPicker:didSelectContacts:

CNContactPickerDelegate 引用:https://developer.apple.com/library/ios/documentation/ContactsUI/Reference/CNContactPickerDelegate_Protocol/

关于ios - 地址簿 UI 框架弃用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35078777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com