Pracuję nad istniejącym celem projektu c, Podczas czytania książki adresowej UI odniesienia do systemu dla iOS znalazłem poniższe klasy mają przestarzałe w iOS 9. (ABUnknownPersonViewController
, ABPersonViewController
, ABPeoplePickerNavigationController
, ABNewPersonViewController
) Co to jest zastępstwo? Gdzie mogę znaleźć jakiś dokument na ten temat. każda pomoc doceniona. Z góry dziękuję .Książka adresowa UI Framework przestarzałe metody
Odpowiedz
Ramy AddressBookUI
została zaniechana w iOS 9
, więc lepiej należy użyć ContactsUI
Framework.
Posiada wiele nowych funkcji, w tym wszystkie funkcje architektury AddressBookUI
.
Tak więc, w przypadku, gdy celujesz konkretnie w iOS 9
, powinieneś wybrać się na ContactsUI
Framework.
Aby sprawdzić, AddressBookUI
ramy jest dostępna dla konkretnego iOS
wersji można wykonać następujące czynności:
if ([CNContactStore class]) {
CNContactStore *store = [CNContactStore new];
//...
} else {
// Fallback to old framework
}
Oto pełna kodują że:
- (void) contactScan
{
if ([CNContactStore class]) {
//ios9 or later
CNEntityType entityType = CNEntityTypeContacts;
if([CNContactStore authorizationStatusForEntityType:entityType] == CNAuthorizationStatusNotDetermined)
{
CNContactStore * contactStore = [[CNContactStore alloc] init];
[contactStore requestAccessForEntityType:entityType completionHandler:^(BOOL granted, NSError * _Nullable error) {
if(granted){
[self getAllContact];
}
}];
}
else if([CNContactStore authorizationStatusForEntityType:entityType]== CNAuthorizationStatusAuthorized)
{
[self getAllContact];
}
}
}
-(void)getAllContact
{
if([CNContactStore class])
{
//iOS 9 or later
NSError* contactError;
CNContactStore* addressBook = [[CNContactStore alloc]init];
[addressBook containersMatchingPredicate:[CNContainer predicateForContainersWithIdentifiers: @[addressBook.defaultContainerIdentifier]] error:&contactError];
NSArray * keysToFetch [email protected][CNContactEmailAddressesKey, CNContactPhoneNumbersKey, CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPostalAddressesKey];
CNContactFetchRequest * request = [[CNContactFetchRequest alloc]initWithKeysToFetch:keysToFetch];
BOOL success = [addressBook enumerateContactsWithFetchRequest:request error:&contactError usingBlock:^(CNContact * __nonnull contact, BOOL * __nonnull stop){
[self parseContactWithContact:contact];
}];
}
}
- (void)parseContactWithContact :(CNContact*)contact
{
NSString * firstName = contact.givenName;
NSString * lastName = contact.familyName;
NSString * phone = [[contact.phoneNumbers valueForKey:@"value"] valueForKey:@"digits"];
NSStrubg * email = [contact.emailAddresses valueForKey:@"value"];
NSArray * addrArr = [self parseAddressWithContac:contact];
}
- (NSMutableArray *)parseAddressWithContac: (CNContact *)contact
{
NSMutableArray * addrArr = [[NSMutableArray alloc]init];
CNPostalAddressFormatter * formatter = [[CNPostalAddressFormatter alloc]init];
NSArray * addresses = (NSArray*)[contact.postalAddresses valueForKey:@"value"];
if (addresses.count > 0) {
for (CNPostalAddress* address in addresses) {
[addrArr addObject:[formatter stringFromPostalAddress:address]];
}
}
return addrArr;
}
Wystarczy upewnić się, że zapytać pozwolenie na odczyt kontaktów z urządzenia.
LINK: https://gist.github.com/willthink/024f1394474e70904728
Aktualizacja:
Przy wymianie na AddressBookUI
trzeba użyć CNContactPickerViewController
. Możesz sprawdzić metody delegatów, które można wykorzystać do pobrania jednego lub wielu kontaktów naraz.
To będzie prezentować wbudowany UIViewController
ze wszystkimi kontaktami i musisz zaimplementować metody delegatów!
Aby wybrać jeden kontakt:
contactPicker:didSelectContact:
Aby zaznaczyć kilka (New Feature):
contactPicker:didSelectContacts:
CNContactPickerDelegate
referencyjnych: https://developer.apple.com/library/ios/documentation/ContactsUI/Reference/CNContactPickerDelegate_Protocol/
Apple wprowadziła nowe ramy dla tego dla iOS9 i powyżej proszę precyzyjnie poniżej linku Link
Edit: jedno ogniwo: Link2
Podniesione e unikaj odpowiedzi tylko na link. Przynajmniej powinieneś wymienić nazwę nowego frameworka (w tym przypadku 'ContactsUI'), aby po zerwaniu odnośników w przyszłości ktoś czytający odpowiedź mógł przynajmniej wyszukać go po nazwie. –
te są oczywiste .. –
Zakładam, że ContactsUI nie będzie dostępne dla wersji <9.0 iOS? Załóżmy, że kieruję reklamy na system iOS 7 lub nowszy. Jak myślisz, jak powinienem się z tym zmierzyć? (Ponieważ otrzymuję przestarzałe ostrzeżenie o metodach korzystających z programu AddressBook Framework \ – NSNoob
Tak, powinieneś zająć się tą metodą, używając powyższego kodu 'if ([CNContactStore class]) { CNContactStore * store = [CNContactStore new]; // ... } else { // Fallback to old framework } ' –
Ale powrót do starej metody nadal będzie zawierał przestarzałe ostrzeżenie w moim projekcie.Jaką motywacją jest przejście do ContactsUI? – NSNoob