標籤:
項目中有一個功能需要讀取通訊錄中連絡人的手機。在iOS8以前都是可用的,主要使用如下三個代理方法來實現
- - (void) peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
- - (BOOL) peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
- - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
- {
- return NO;
- }
但是iOS8更新以後,悲劇的事情發生了:
// Deprecated, use predicateForSelectionOfPerson and/or -peoplePickerNavigationController:didSelectPerson: instead.
- - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person NS_DEPRECATED_IOS(2_0, 8_0);
- // Deprecated, use predicateForSelectionOfProperty and/or -peoplePickerNavigationController:didSelectPerson:property:identifier: instead.
- - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier NS_DEPRECATED_IOS(2_0, 8_0);
其中兩個方法被幹掉了(對於iOS開發人員來說來說這種情況太常見了)
參考文檔發現可以使用如下兩個方法來代替:
- // Called after a person has been selected by the user.
- - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person NS_AVAILABLE_IOS(8_0);
-
- // Called after a property has been selected by the user.
- - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier NS_AVAILABLE_IOS(8_0);
這兩個方法是這樣的,因為iOS8以後通訊錄的結構有所變化:第一層是人名列表,點擊某個人名進去之後是這個人的詳細資料。
其中:
第一個方法是選中這個人之後調用。
第二個方法是選中這個人的詳細資料後調用。
解析具體資訊的代碼可以完全不變
轉自:http://blog.csdn.net/mmoaay/article/details/41350991
iOS8通訊錄資訊讀取相容