2014-09-24 21 views
6

Uygulamamdaki bir telefon numarasını seçmeyi işlemek için ABPeoplePickerNavigationController alt sınıfım var. Her şey iOS 7 ve altında harika çalışıyor.iOS 8'de kişi seçilemiyor

iOS 8'de, bir telefon numarası seçerken ABPeoplePickerNavigationControllerDelegate numaralı telefona rastlanmadı. Bunun yerine, sadece telefon numarasını arar.

iOS 7'de (peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:) kişi seçimini işlemek için kullandığım yöntemin iOS 8'de kullanımdan kaldırıldığını fark ettim. Bu yöntem peoplePickerNavigationController:didSelectPerson:property:identifier: ile değiştirildi.

Temsilcimin ayarlandığını biliyorum çünkü peoplePickerNavigationControllerDidCancel: yöntem geri bildirimini başarılı bir şekilde aldım.

Başka biri bu sorunu yaşadı mı?

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { 

    [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person property:property identifier:identifier]; 
} 

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { 

    ...do stuff... 

    return NO; 
} 

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { 

    return YES; 
} 

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker { 

    [self dismissViewControllerAnimated:self.shouldAnimateDismiss completion:NULL]; 
} 
+0

'prededicForSelectionOfProperty' nedir? – Rob

+0

Xcode 6 ile mi çalışıyorsunuz ve projenizde iOS 8'in bir Temel SDK'sı var mı? – rmaddy

+0

@Rob Hiçbir şey. Bunu ayarlamadan her zaman çalıştı. – Alexander

cevap

6

Eğer peoplePickerDelegate belirtiyorsanız:

İşte benim ABPeoplePickerNavigationController alt sınıfının bir kod parçacığı var?

iOS 8'de, sen (didSelect... ve shouldContinue... yok, temsilci işleri iptal) Eğer tarif meraklı davranış yaşayacaksınız, viewDidLoad içinde peoplePickerDelegate belirtirseniz. init'dan hemen sonra (veya sırasında) peoplePickerDelegate belirterseniz, iyi çalışır.

Bu, bir iOS 8 "özelliği" olarak görünecektir. Bir hata raporu göndereceğim.

+0

Bu benim sorunumdu. Teşekkürler!! Bu gerçekten çok ilginç bir değişim. – Alexander

+0

Sorunum, "picker.peoplePickerDelegate = self" yerine "picker.delegate = self" yazıyordum. – kev

+0

@Rob Merhaba efendim projemde gayet iyi yapıyorum, peoplePickerDelegate düğmesini tıklama yöntemiyle belirtiyorum, ancak şimdi iptal yöntemi iyi çalışıyor ancak (BOOL) peoplepickernavigationcontroller çağrılmadı. –

2

above two delegate methods are deprecated in ios 8.0, use use methods last two for getting your desire result

iki yukarıdaki temsilci yöntemleri, iOS 8.0 kullanımdan kaldırılmış sizin arzu sonuç almak için son iki yöntem kullanabilirsiniz edilir

bu elma geliştirici kılavuz bağlantı, size verecek mi fazla bilgi hakkında

ABPeoplePickerNavigationControllerDelegate

0

IOS8'de bir kişi seçtiğimde hiçbir şey olmazdı.

Ben

if ([picker respondsToSelector:@selector(setPredicateForSelectionOfPerson:)]) 
    { 
     picker.predicateForSelectionOfPerson = [NSPredicate predicateWithFormat:@"[email protected] = 1"]; 
    } 

ilaveten ben de gerekli bulundu

if ([picker respondsToSelector:@selector(setPredicateForEnablingPerson:)]) 
    { 
     picker.predicateForEnablingPerson = [NSPredicate predicateWithFormat:@"[email protected] > 0"]; 
    } 

Kaynak https://developer.apple.com/library/prerelease/ios/samplecode/PeoplePicker/Listings/PeoplePicker_AAPL_8or7_EmailPickerViewController_m.html

0

sadece kişinin adını almak bunu yapabilirsiniz istiyorum edin:

-(IBAction)btnGetContact{ 
    ABPeoplePickerNavigationController *personPicker = [ABPeoplePickerNavigationController new]; 
    personPicker.peoplePickerDelegate = self; 
    [self presentViewController:personPicker animated:YES completion:nil]; 
} 

-(void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{ 
     NSString *firstName; 
    NSString *middleName; 
    NSString *lastName; 
    UIImage *retrievedImage; 

    // get the first name 
    firstName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 

    //get the middle name 
    middleName = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonMiddleNameProperty); 

    // get the last name 
    lastName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 

    // get personPicture 
    if (person != nil && ABPersonHasImageData(person)) 
    { 
     retrievedImage = [UIImage imageWithData:(__bridge_transfer NSData*)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail)]; 
    } 
    else 
    { 
     retrievedImage = nil; 
    } 
} 
Kişinin numaraları almak için kişinin detaylara gitmeye arıyorsanızAma, aşağıda gibi YES yerine void peoplePickerNavigationController için BOOL kullanıp geçmelidir:

-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{ 
    return YES; 
} 



-(void) peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{ 
     ABMutableMultiValueRef phoneno = ABRecordCopyValue(person, kABPersonPhoneProperty); 

CFStringRef phone = ABMultiValueCopyValueAtIndex(phoneno, identifier); 

     _mPhone.text = (__bridge NSString *)phone; 

     [self dismissViewControllerAnimated:NO completion:^(){}]; 
    } 

Ayrıca proje ve ABPeoplePickerNavigationControllerDelegate için AddressBook.framework ve AddressBookUI.framework içe olmak için unutmak Başlık dosyanız için

.

İlgili konular