2010-12-07 3 views
20

Potrzebuję wybrać źródło książki adresowej, w którym kontakty są tworzone przez moją aplikację.Książka adresowa iPhone: lista źródeł i kont

W aplikacji Kontakty, po zaznaczeniu "< Grupy", otrzymuję Opcje

  • Wszystkie kontakty
  • MobileMe
    • Wszystko MobileMe
    • Firma
    • Rodzina
    • Znajomi
    • ...
  • ACME Exchange
    • ACME Exchange globalna lista adresowa
  • test CardDAV
    • adresowa
    • Szukaj

Korzystanie z funkcji ABAddressBookCopyArrayOfAllSources uzyskać rekordy źródłowe dla

  • No name; typ: kABSourceTypeMobileMe
  • Brak nazwy; typ: kABSourceTypeExchangeGAL
  • "Książka adresowa"; typ: kABSourceTypeCardDAV
  • "Wyszukaj"; type: kABSourceTypeCardDAVSearch

Nazwy nie mają charakteru opisowego i oprócz nazwy źródła lub typu chcę wyświetlić nazwy rachunków, podobnie jak w aplikacji Kontakt.

Czy znasz sposób na sprawdzenie nazwy konta źródła lub odzyskanie wszystkich istniejących nazw kont i źródeł każdego konta? Jakieś inne pomysły na bardziej opisowe wpisy?

+0

Czy dowiedziałeś się, jak wyświetlić nazwy kont? np. w twoim przykładzie: Wymiana ACME lub Test CardDAV –

Odpowiedz

0

To może pomóc:

Obtaining Specific ABSource from ABAddressBook in iOS 4+

iOS 4+ zapewnia nowe API, które pozwala na wybranie określonego ABSource z ABAddressBook. Może to być przydatne, ponieważ niektóre operacje, np. tworzenie ABGroup, nie są obsługiwane w niektórych źródłach (tj. Exchange).

"Nie wszystkie typy źródeł obsługują grupy, bardziej rzucające się w oczy, Exchange nie wie nic o grupach."- http://flavors.me/volonbolon#1a5/tumblr

To pokazuje, jak można wykorzystać funkcje wykorzystujące nowe API do uzyskania poszczególnych rodzajów źródeł, które mogą być stosowane w połączeniach do ABGroupCreateInSource(), który wydaje się być to, co jesteś po

4

dzień. iOS 5.1 nie ma publicznego API dla tego

Można by mieć nadzieję, że ABRecordCopyCompositeName() dostanie co jesteś po. - zapewnia to „ludzkie” przyjazną nazwę dla osób i grupy rejestrów. - ale niestety to zwraca null

Jak zauważył Graham (oferując nagrodę) bezpośrednio Sking dla kABSourceNameProperty dostarcza złą odpowiedź.

ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef sources = ABAddressBookCopyArrayOfAllSources(addressBook); 

CFIndex i, c = CFArrayGetCount(sources); 
ABRecordRef curSource; 

// Log each source name. 
for (i=0; i<c; i++) { 
    curSource = CFArrayGetValueAtIndex(sources, i); 
    NSString *name = (__bridge_transfer NSString *)ABRecordCopyCompositeName(curSource); 
    NSLog(@"Alas this is null: %@", name); 


    NSString *directValue = (__bridge_transfer NSString *)ABRecordCopyValue(curSource,kABSourceNameProperty); 
    NSLog(@"And direct access gives wrong answer: %@", directValue); 

} 

CFRelease(sources); 
CFRelease(addressBook); 

Wszystko, co mogę zasugerować jest złożenie Radar zapytać że ABRecordCopyCompositeName() być wykonane, aby cokolwiek serwis Kontakt sama korzysta dostępna dla reszty z nas.

+0

Dzięki temu, niestety, dokumentacja 'ABRecordCopyCompositeName()' zawiera "Zachowanie tej funkcji nie jest zdefiniowane dla rekordów źródłowych." więc nie spodziewałem się, że to zadziała :-( –

+0

Tak, to właśnie dlatego nie działa wtedy. :-) –