Quels sont les mots clés autour iPhone par défaut carnet d'adresses Téléphone Personnes Nombre d'étiquettes?

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

  •  18-09-2019
  •  | 
  •  

Question

Ma question porte sur le balisage qui entoure certaines des étiquettes de numéro de téléphone par défaut dans les entrées de personne de la liste de contacts sur l'iPhone.

J'ai créé une entrée liste de contacts iPhone adresse livre pour une personne, « John Smith » avec les entrées de numéros de téléphone suivants:

  • Mobile (604) 123-4567
  • iPhone (778) 123-4567
  • Maison (604) 789-4561
  • Travail (604) 456-7891
  • principal (604) 789-1234
  • porte-voix (234) 567-8990

Notez que les cinq premières étiquettes sont des étiquettes par défaut fournies par l'application Contacts et la dernière étiquette, « porte-voix », est une étiquette personnalisée.

J'ai écrit la méthode suivante pour récupérer et afficher les étiquettes et les numéros de téléphone pour chaque personne dans le carnet d'adresses:

-(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);
}

et voici la sortie pour l'entrée du carnet d'adresses que je suis entré dans:

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] ---------

Quels sont les caractères de balisage

_$!< and >!$_

entourant la plupart, sauf pour iPhone, des étiquettes par défaut?

Pouvez-vous me montrer où dans le « Carnet d'adresses Guide de programmation pour iPhone OS » Je peux trouver l'information?

Merci pour votre aide.

Était-ce utile?

La solution

Je suis en cours d'exécution dans le même problème. Ce que je pense à ce jour.

Le balisage que votre vision indique au système que ce soit une étiquette par défaut et non une étiquette personnalisée. Si vous exécutez ce code:
NSLog(kABOtherLabel);

vous aurez ge ce résultat:
_$!<Other>!$_

sorte que soit la valeur mémorisée dans la constante de kABOtherLabel (de type CFStringRef). Je pense que la raison iPhone ne pas le balisage autour d'elle est becuase c'est une étiquette « Custom », mais il est un origine par Apple au lieu de l'utilisateur.

Vous pouvez donner l'étiquette d'une valeur quelconque, comme en témoigne l'étiquette de votre megaphone ci-dessus. Mais remarquez que si vous essayez et de créer un numéro de téléphone (ou adresse e-mail) avec l'étiquette « autre » sans utiliser la valeur constante ou il est kABOtherLabel _$!<Other>!$_, le système pensera que vous créez une étiquette personnalisée. Comme dans cet exemple:

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

Et si vous allez modifier cette entrée Carnet d'adresses sur l'iPhone, il sera affiché dans une liste séparée des étiquettes personnalisées. (Donc, il y aura 2 choix pour « autre », l'une des valeurs par défaut et un dans les étiquettes personnalisées)

Même si cela n'a pas répondu à votre question, j'espère que cela aide.

Autres conseils

Ceci est en grande partie le même dans le nouveau cadre CNContact qui a remplacé ABAddressBook comme méthode recommandée pour gérer les contacts.

Il y a six étiquettes par défaut fournies par Apple, qui sont référencés avec CNLabelledValue spécifiques au téléphone constantes :

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

L'inclusion de _$!< et >!$_ autour de cinq de ces constantes est très probablement un marqueur que les chaînes peuvent être localisées par le système d'exploitation, compte tenu de la disponibilité de la méthode localizedString (forLabel :) . Je crois que la raison pour laquelle ces délimiteurs ne semblent pas autour de l'iPhone est parce que Apple ne localisent pas l'iPhone, qui est affiché comme « iPhone » dans toutes les langues.

Le comportement raisonnable serait de cacher ces lors de l'affichage de la chaîne, qui se produit à l'aide localizedString(forLabel:), continuer à stocker ces délimiteurs avec la chaîne si modification de l'entrée et la carte toute étiquette créée par l'utilisateur à ces chaînes où l'étiquette personnalisée était égale au corps principal de ceux-ci, à savoir, mobile, Main, téléavertisseur, et ainsi de suite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top