Was sind die Tags rund um die standardmäßigen iPhone-Adressbuch-Telefonnummernbeschriftungen?

StackOverflow https://stackoverflow.com/questions/2404975

  •  18-09-2019
  •  | 
  •  

Frage

Meine Frage betrifft Markup, das einige der Standard-Telefonnummernbezeichnungen in den Personeneinträgen der Kontaktliste auf dem iPhone umgibt.

Ich habe einen iPhone-Kontaktlisten-Adressbucheintrag für eine Person namens „John Smith“ mit den folgenden Telefonnummereinträgen erstellt:

  • Mobil (604) 123-4567
  • iPhone (778) 123-4567
  • Privat (604) 789-4561
  • Arbeit (604) 456-7891
  • Haupt (604) 789-1234
  • Megaphon (234) 567-8990

Beachten Sie, dass es sich bei den ersten fünf Bezeichnungen um Standardbezeichnungen handelt, die von der Anwendung „Kontakte“ bereitgestellt werden, und dass es sich bei der letzten Bezeichnung, „Megafon“, um eine benutzerdefinierte Bezeichnung handelt.

Ich habe die folgende Methode geschrieben, um die Beschriftungen und Telefonnummern für jede Person im Adressbuch abzurufen und anzuzeigen:

-(void)displayPhoneNumbersForAddressBook {
    ABAddressBookRef book = ABAddressBookCreate();
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(book);
    ABRecordRef record = CFArrayGetValueAtIndex(people, 0);
    ABMultiValueRef multi = ABRecordCopyValue(record, kABPersonPhoneProperty); 
    NSLog(@"---------" );
    NSLog(@"displayPhoneNumbersForAddressBook" );

    CFStringRef label, phone;
    for (CFIndex i = 0; i < ABMultiValueGetCount(multi); ++i) {
            label = ABMultiValueCopyLabelAtIndex(multi, i);
            phone = ABMultiValueCopyValueAtIndex(multi, i);
            NSLog(@"label: \"%@\"     number: \"%@\"", (NSString*)label, (NSString*)phone);
            CFRelease(label);
            CFRelease(phone);
    }
    NSLog(@"---------" ); 
    CFRelease(multi);
    CFRelease(people);
    CFRelease(book);
}

und hier ist die Ausgabe für den Adressbucheintrag, den ich eingegeben habe:

2010-03-08 13:24:28.789 test2m[2479:207] ---------
2010-03-08 13:24:28.789 test2m[2479:207] displayPhoneNumbersForAddressBook
2010-03-08 13:24:28.790 test2m[2479:207] label: "_$!<Mobile>!$_"     number: "(604) 123-4567"
2010-03-08 13:24:28.790 test2m[2479:207] label: "iPhone"     number: "(778) 123-4567"
2010-03-08 13:24:28.791 test2m[2479:207] label: "_$!<Home>!$_"     number: "(604) 789-4561"
2010-03-08 13:24:28.791 test2m[2479:207] label: "_$!<Work>!$_"     number: "(604) 456-7891"
2010-03-08 13:24:28.792 test2m[2479:207] label: "_$!<Main>!$_"     number: "(604) 789-1234"
2010-03-08 13:24:28.792 test2m[2479:207] label: "megaphone"     number: "(234) 567-8990"
2010-03-08 13:24:28.793 test2m[2479:207] ---------

Was sind die Markup-Zeichen?

_$!< and >!$_

Gibt es, abgesehen vom iPhone, die meisten Standardbezeichnungen für?

Können Sie mir sagen, wo ich im „Adressbuch-Programmierhandbuch für iPhone OS“ die Informationen finden kann?

Ich danke Ihnen für Ihre Hilfe.

War es hilfreich?

Lösung

Ich stehe vor dem gleichen Problem.Das ist meine bisherige Meinung.

Das Markup, das Sie sehen, zeigt dem System an, dass es sich um ein Standardlabel und nicht um ein benutzerdefiniertes Label handelt.Wenn Sie diesen Code ausführen:
NSLog(kABOtherLabel);

Sie erhalten dieses Ergebnis:
_$!<Other>!$_

Das ist also der Wert, der im gespeichert ist kABOtherLabel Konstante (vom Typ CFStringRef).Ich denke, der Grund iPhone Das Markup ist nicht vorhanden, da es sich um ein „Benutzerdefiniert“-Label handelt, das jedoch von Apple und nicht vom Benutzer stammt.

Sie können dem Etikett einen beliebigen Wert geben, der durch Ihre Angaben belegt wird megaphone Etikett oben.Beachten Sie jedoch Folgendes: Wenn Sie versuchen, eine Telefonnummer (oder E-Mail-Adresse) mit der Bezeichnung „Andere“ zu erstellen, ohne die zu verwenden kABOtherLabel Konstante oder ihr Wert _$!<Other>!$_, geht das System davon aus, dass Sie ein benutzerdefiniertes Etikett erstellen.Wie in diesem Beispiel:

ABMultiValueAddValueAndLabel(email, @"nospam@notarealdomain.com", @"other", NULL);

Und wenn Sie diesen Adressbucheintrag auf dem iPhone bearbeiten, wird er in einer separaten Liste mit benutzerdefinierten Beschriftungen angezeigt.(Es gibt also zwei Auswahlmöglichkeiten für „Andere“, eine in den Standardeinstellungen und eine in den benutzerdefinierten Beschriftungen.)

Obwohl dies Ihre Frage nicht beantwortet hat, hoffe ich, dass es hilft.

Andere Tipps

Dies ist im Wesentlichen das gleiche in den neuen CNContact Rahmen die ABAddressBook als die ersetzt empfohlene Weg, Kontakte zu behandeln.

Es gibt sechs Standard-Etiketten, die von Apple bereitstellt, die mit referenziert werden telefonspezifische CNLabelledValue Konstanten :

CNLabelPhoneNumberiPhone = "iPhone"
CNLabelPhoneNumberMobile = "_$!<Mobile>!$_"
CNLabelPhoneNumberMain = "_$!<Main>!$_"
CNLabelPhoneNumberHomeFax = "_$!<HomeFAX>!$_"
CNLabelPhoneNumberOtherFax = "_$!<OtherFAX>!$_"
CNLabelPhoneNumberPager = "_$!<Pager>!$_"

Die Einbeziehung von _$!< und >!$_ um fünf dieser Konstanten ist höchstwahrscheinlich eine Markierung, die die Saiten durch das Betriebssystem lokalisiert werden können, ist die Verfügbarkeit des Verfahrens gegeben LocalizedString (forLabel :) . Ich glaube, der Grund, warum diese Trennzeichen um iPhone nicht angezeigt ist, weil Apple iPhone nicht lokalisiert werden, die als „iPhone“ in allen Sprachen angezeigt wird.

Das vernünftige Verhalten wäre diese zu verstecken, wenn die Zeichenfolge anzuzeigen, die localizedString(forLabel:) auftritt verwenden, weiterhin diese Trennzeichen mit der Zeichenfolge speichern, wenn Sie den Eintrag bearbeiten, und Karte eine beliebige vom Benutzer erstellte Etikett auf diese Strings, wo die benutzerdefinierte Etikett war gleich auf den Hauptkörper von diesen, dh mobile, Main, Pager, und so weiter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top