ABAddressBookRequestAccessWithCompletion在iOS 10上崩溃

5

我在我的iOS应用中使用以下代码访问联系人。在iOS<10版本中,它能正常工作,但在Xcode 8和iOS 10中会崩溃:

- (void)btcContacts_tap {
    ABAddressBookRef addressBook =  ABAddressBookCreateWithOptions(NULL, NULL);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        if (granted) {
            _addressBookController = [[ABPeoplePickerNavigationController alloc] init];

            [[_addressBookController navigationBar] setBarStyle:UIBarStyleBlack];

            _addressBookController.delegate = self;
            [_addressBookController setPredicateForEnablingPerson:[NSPredicate predicateWithFormat:@"%K.@count > 0", ABPersonPhoneNumbersProperty]];
            [_addressBookController setPeoplePickerDelegate:self];
            [self presentViewController:_addressBookController animated:YES completion:nil];
        }
        else {
            dispatch_async(dispatch_get_main_queue(), ^{
                [self showMessage:NSLocalizedStringFromTable(@"PLEASE_GRANT_CONTACTS", LIApplicationLanguage(), nil) andAdvertise:@"" andService:nil andTransactionState:kTTTransactionStateInfo];
            });
        }
    });
}

我已经设置了NSSetUncaughtExceptionHandler方法来记录崩溃报告,但是即使异常处理程序没有被调用...。是否还有其他人遇到过这个问题?

1
Husein,从iOS 9开始已经被弃用。你不能再使用它了。你应该使用联系人框架。 - user3182143
如果您想使用联系人框架开发应用程序,我可以帮助您。我将使用联系人框架发布答案。 - user3182143
2个回答

23

iOS 10:

您需要将NSContactsUsageDescription放入您的plist文件中。例如:

<key>NSContactsUsageDescription</key>
<string>$(PRODUCT_NAME) uses photos</string>

查看所有用法说明此处


真的帮了我很多。 - Ravi Gupta
一个Xcode的错误信息提示本来就很好了。感谢您解决这个问题! - jwhat

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接