使用 AddressBook 框架时,iOS 11 上的应用程序崩溃?
Posted
技术标签:
【中文标题】使用 AddressBook 框架时,iOS 11 上的应用程序崩溃?【英文标题】:application crash on ios 11 when working with AddressBook framework? 【发布时间】:2017-11-05 09:30:47 【问题描述】:我正在开发 voip 应用程序。获取联系人工作,但当我想拨打电话时,应用程序崩溃。
[ABSAddressBook 联系人]:发送到已释放实例的消息 0x1c1478180 警告:无法执行支持代码读取 Objective-C 类中的数据过程。这可能会降低质量 可用的类型信息。
在这一行发生了崩溃。
NSArray *lContacts = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
- (void) checkContactListForJogvoiceList
// if (![BundleLocalData isLoadingJogvoiceContactList])
// [BundleLocalData setLoadingJogvoiceContactList:true];
int maxPhoneNumberSubmit = 200;
NSArray *lContacts = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableDictionary *phoneNumberContactsDictionary = [[NSMutableDictionary alloc] init];
NSMutableArray *allPhoneNumberList = [[NSMutableArray alloc] init];
for (id lPerson in lContacts)
ABRecordRef person = (ABRecordRef)lPerson;
NSArray *phoneList = [AppUtil getContactPhoneList:person];
for (NSString* phoneNumber in phoneList)
NSMutableArray* contactList = phoneNumberContactsDictionary[phoneNumber];
if (!contactList)
contactList = [[NSMutableArray alloc] init];
[contactList addObject:(__bridge ABRecordRef)person];
phoneNumberContactsDictionary[phoneNumber] = contactList;
[allPhoneNumberList addObjectsFromArray:phoneList];
if (allPhoneNumberList.count >= maxPhoneNumberSubmit)
[self checkContactList:allPhoneNumberList phoneNumberContactsDictionary:phoneNumberContactsDictionary];
if (allPhoneNumberList.count > 0)
[self checkContactList:allPhoneNumberList phoneNumberContactsDictionary:phoneNumberContactsDictionary];
// ABAddressBookUnregisterExternalChangeCallback(addressBook, sync_address_book, self);
// [BundleLocalData setLoadingJogvoiceContactList:false];
//
可能是因为地址簿框架在 ios9 中已弃用?我对吗? 我不想使用联系人框架。
【问题讨论】:
你是如何初始化addressBook
的?由于许可问题,我认为它为零。在访问任何内容之前,您应该检查地址簿权限。
【参考方案1】:
根据 Apple doc ABAddressBookCreateWithOptions 使用地址簿功能 ABAddressBookCreateWithOptions
如果用户未授予权限,则返回 NULL。
在 iOS 6.0 及更高版本上,如果调用者无权访问通讯簿数据库:
对于链接到 iOS 6.0 及更高版本的应用程序,此函数返回 NULL。 对于与早期版本的 iOS 链接的应用程序,此函数返回一个空的只读数据库。
你应该关注这篇文章How do I correctly use ABAddressBookCreateWithOptions method in iOS 6?
【讨论】:
以上是关于使用 AddressBook 框架时,iOS 11 上的应用程序崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
IOS:#import <AddressBook/AddressBookUI.h> 文件未找到