2016-09-23 6 views
2

Выбрав контакт из панели управления контактами, вы можете отключить приложение в iOS10.0. Контакты сборщика показано с помощью ABPeoplePickerNavigationController так:Ошибка адресной книги на iOS10

let contactsPicker = ABPeoplePickerNavigationController() 
contactsPicker.peoplePickerDelegate = self 
self.presentViewController(contactsPicker, animated: true, completion: nil) 

Вот трассировки стека из журнала аварии:

*** Terminating app due to uncaught exception 'CNPropertyNotFetchedException', reason: 'A property was not requested when contact was fetched.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0000000105a1c34b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x00000001052cd21e objc_exception_throw + 48 
    2 CoreFoundation      0x0000000105a85265 +[NSException raise:format:] + 197 
    3 Contacts       0x000000010dc6d96f -[CNContact sectionForSortingByFamilyName] + 160 
    4 Contacts       0x000000010dc3e18e __55-[CNContact(iOSABCompatibility) overwritePerson:error:]_block_invoke + 44 
    5 CoreFoundation      0x00000001059ad2fd __53-[__NSArrayI enumerateObjectsWithOptions:usingBlock:]_block_invoke + 77 
    6 CoreFoundation      0x00000001059ad1df -[__NSArrayI enumerateObjectsWithOptions:usingBlock:] + 207 
    7 Contacts       0x000000010dc3e0f4 -[CNContact(iOSABCompatibility) overwritePerson:error:] + 240 
    8 Contacts       0x000000010dc3dfc0 -[CNContact(iOSABCompatibility) detachedPersonWithError:] + 46 
    9 AddressBookUI      0x00000001057bdd77 -[ABPeoplePickerNavigationController contactPicker:didSelectContact:] + 145 
    10 ContactsUI       0x0000000112396eb2 -[CNContactPickerViewController pickerDidSelectContact:property:] + 306 
    11 ContactsUI       0x000000011243ee6f -[CNContactPickerHostViewController pickerDidSelectContact:property:] + 95 
    12 ContactsUI       0x000000011243f5ec __71-[CNContactPickerExtensionHostContext pickerDidSelectContact:property:]_block_invoke + 66 

Я уже добавил NSContactsUsageDescription в info.plist, как обсуждалось на Contact Address book crash on iOS 10 beta но Didn» t, и я не могу использовать CNContactPickerViewController, так как мне нужно поддерживать устройства iOS8.

ответ

0

API адресной книги устарел в iOS 9 в пользу более объектно-ориентированной структуры контактов.

Вместо использования ABPeoplePickerViewController перейдите к CNContactPickerViewController.

1

Имран Рахим

Из решения Erdekhayser в (Contact Address book crash on iOS 10 beta)

вы можете использовать этот метод для проверки CNContactPickerViewController доступен?

if (NSClassFromString(@"CNContactPickerViewController")) { 
     // iOS 9, 10, use CNContactPickerViewController 
     CNContactPickerViewController *picker = [[CNContactPickerViewController alloc] init]; 
     picker.delegate = self; 
     picker.displayedPropertyKeys = @[CNContactPhoneNumbersKey]; 
     [pr presentViewController:picker animated:YES completion:nil]; 
    }else{ 
     // iOS 8 Below, use ABPeoplePickerNavigationController 
     ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
     picker.peoplePickerDelegate = self; 
     [pr presentViewController:picker animated:YES completion:nil]; 
    }