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 .. –
- 1. Workbench xerox, książka adresowa, snmp
- 2. iPhone: książka adresowa jest czasami kasowana
- 3. iOS 6 Wyjmij książka adresowa Wpis pozwolenie
- 4. Książka adresowa iPhone: lista źródeł i kont
- 5. Książka adresowa iOS 6 pusta kABPersonPhoneProperty
- 6. Książka adresowa iPhone - pobranie pozycji zerowej w ABAddressBookGetPersonWithRecordID
- 7. Jak zaimplementować okno w stylu HUD, takie jak Książka adresowa "Pokaż w dużym typie"
- 8. iOS 8 CoreBluetooth przestarzałe metody RSSI
- 9. Metody analizatora składni SBJson iOS są przestarzałe?
- 10. nieruchomość i metody iOS 6 iAd przestarzałe
- 11. Dlaczego wszystkie metody są przestarzałe w PoolingClientConnectionManager?
- 12. Walidacja UI Entity Framework przy użyciu WinForms
- 13. Algorytmy DSP Książka
- 14. Najlepiej sprawdzone metody Entity Framework i WPF
- 15. Jak zastąpić przestarzałe metody doSuccessCallbackString i writeJavascript w Objective-C?
- 16. Używanie metody getPreventDefault() jest przestarzałe. Zastosowanie defaultPrevented zamiast
- 17. Argument openCL struktury struct niepoprawna przestrzeń adresowa
- 18. Czy auto_ptr jest przestarzałe?
- 19. Dlaczego Przestarzałe powoduje błąd?
- 20. Dobra książka dla Unix Internals
- 21. Książka dla Django + Seler + RabbitMQ?
- 22. Książka OS Architektura systemu Windows
- 23. zaawansowana c lub C++ książka
- 24. Dobra książka na C# stylu?
- 25. Czy istnieje książka Fluent NHibernate?
- 26. Książka rdzewiejąca, gra niepoprawna typu
- 27. Przestarzałe: Function eregi() jest przestarzałe w
- 28. PhpStorm znajduje wszystkie przestarzałe zastosowania w projekcie
- 29. TWTweetComposeViewController przestarzałe w IOS6
- 30. WakefulBroadcastReceiver jest przestarzałe
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