2010-03-08 10 views
8

La mia domanda riguarda il markup che circonda alcune delle etichette del numero di telefono predefinito nelle voci Persona dell'elenco Contatti sull'iPhone.Quali sono i tag attorno alla rubrica predefinita dell'iPhone Etichette dei numeri di telefono delle persone?

ho creato un indirizzo entry list rubrica iPhone per una persona, "John Smith" con le seguenti voci numero di telefono:

  • mobile (604) 123-4567
  • iPhone (778) 123 -4567
  • casa (604) 789-4561
  • lavoro (604) 456-7891
  • principale (604) 789-1234
  • megafono (234) 567-8990

Si noti che le prime cinque etichette sono etichette predefinite fornite dall'applicazione Contatti e l'ultima etichetta, "megafono", è un'etichetta personalizzata.

ho scritto il seguente metodo per recuperare e visualizzare le etichette ei numeri di telefono per ogni persona nella rubrica:

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

e qui è l'uscita per la voce della rubrica che sono entrato:

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

Quali sono i caratteri di markup

_$!<and>!$_ 

che circondano la maggior parte, sa ve per iPhone, delle etichette predefinite per?

Potete indicarmi dove si trova nella "Guida alla programmazione della Rubrica per iPhone OS". Posso trovare le informazioni?

Grazie per il vostro aiuto.

+4

È possibile utilizzare ABAddressBookCopyLocalizedLabel (ABMultiValueCopyLabelAtIndex (multi, i)) per eliminare quei caratteri di markup. – digdog

+0

Grazie, Digdog, non lo sapevo. – rnistuk

risposta

7

Mi sto imbattendo nello stesso problema. Questo è ciò che penso finora.

Il markup che viene visualizzato indica al sistema che si tratta di un'etichetta predefinita e non di un'etichetta personalizzata. Se si esegue questo codice:
NSLog(kABOtherLabel);

Potrai ge questo risultato:
_$!<Other>!$_

Quindi questo è il valore memorizzato nella kABOtherLabel costante (di tipo CFStringRef). Penso che il motivo iPhone non abbia il markup intorno a se è perché è un'etichetta 'personalizzata', ma è quella originata da Apple al posto dell'utente.

È possibile assegnare all'etichetta qualsiasi valore che si desidera, come evidenziato dall'etichetta megaphone in alto. Ma notate che se provate a creare un numero di telefono (o indirizzo e-mail) con l'etichetta "altro" senza utilizzare la costante kABOtherLabel o il suo valore _$!<Other>!$_, il sistema penserà che state creando un'etichetta personalizzata.Come in questo esempio:

ABMultiValueAddValueAndLabel(email, @"[email protected]", @"other", NULL);

E se si va e modificare quella voce della Rubrica su iPhone, verrà visualizzato in un elenco separato di etichette personalizzate. (Quindi ci saranno 2 scelte per "altro", uno nei valori di default e uno nelle etichette personalizzate)

Mentre questo non ha risposto alla tua domanda, spero che sia d'aiuto.

+0

Scusa, pensavo di aver già commentato prima, probabilmente ho dimenticato di premere il pulsante. Grazie per la tua spiegazione, penso che sia incredibile e conferma quello che stavo pensando. – rnistuk

1

Questo è in gran parte lo stesso nel nuovo CNContact framework che ha sostituito ABAddressBook come metodo consigliato per gestire i contatti.

Ci sono sei etichette predefinite fornite da Apple, che si fa riferimento con phone-specific CNLabelledValue constants:

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

L'inclusione di _$!< e >!$_ circa cinque di questi concorrenti è più probabile un indicatore che le stringhe possono essere localizzati dalla sistema operativo, data la disponibilità del metodo localizedString(forLabel:). Credo che la ragione per cui questi delimitatori non appaiono intorno all'iPhone è perché Apple non localizza l'iPhone, che viene visualizzato come "iPhone" in tutte le lingue.

Il comportamento ragionevole sarebbe quello di nascondere questi quando si visualizza la stringa, che si verifica utilizzando localizedString(forLabel:), continuare a memorizzare questi delimitatori con la stringa se si modifica la voce e associare qualsiasi etichetta creata dall'utente a queste stringhe in cui era presente l'etichetta personalizzata uguale al corpo principale di questi, cioè Mobile, Main, Pager e così via.

Problemi correlati