2010-03-08 9 views
8

Mi pregunta se refiere al marcado que rodea algunas de las etiquetas de número de teléfono predeterminadas en las entradas Persona de la lista de contactos en el iPhone.¿Cuáles son las etiquetas que rodean la etiqueta de número de teléfono predeterminado de la libreta de direcciones de iPhone?

He creado una lista de direcciones de entrada de la libreta de contactos de iPhone para una persona, "John Smith", con las siguientes entradas de números de teléfono:

  • móvil (604) 123-4567
  • iPhone (778) 123 -4567
  • Inicio (604) 789-4561
  • trabajo (604) 456-7891
  • principal (604) 789-1234
  • megáfono (234) 567-8990

Tenga en cuenta que las primeras cinco etiquetas son etiquetas predeterminadas proporcionadas por la aplicación Contactos y la última etiqueta, "megáfono", es una etiqueta personalizada.

me escribió el siguiente método para recuperar y mostrar las etiquetas y números de teléfono para cada persona en la libreta de direcciones:

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

y aquí está la salida para la entrada de la libreta de direcciones que entré:

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

¿Cuáles son los caracteres de marcado

_$!<and>!$_ 

que rodean la mayoría, sa ve para iPhone, de las etiquetas predeterminadas para?

¿Puede indicarme en qué parte de la "Guía de programación de la libreta de direcciones para iPhone OS" puedo encontrar la información?

Gracias por su ayuda.

+4

Puede usar ABAddressBookCopyLocalizedLabel (ABMultiValueCopyLabelAtIndex (multi, i)) para deshacerse de esos caracteres de marcado. – digdog

+0

Gracias, Digdog, no lo sabía. – rnistuk

Respuesta

7

Tengo el mismo problema. Esto es lo que pienso hasta ahora.

El marcado que su vista indica al sistema que esta es una etiqueta Predeterminada y no una etiqueta personalizada. Si ejecuta este código:
NSLog(kABOtherLabel);

podrás ge este resultado:
_$!<Other>!$_

Así que ese es el valor almacenado en la kABOtherLabel constante (de tipo CFStringRef). Creo que el motivo iPhone no tiene el marcado a su alrededor es porque es una etiqueta 'Personalizada', pero es uno originado por Apple en lugar del usuario.

Puede darle a la etiqueta el valor que desee, como lo demuestra su etiqueta megaphone arriba. Pero tenga en cuenta que si intenta crear un número de teléfono (o dirección de correo electrónico) con la etiqueta "otro" sin usar la constante kABOtherLabel o su valor _$!<Other>!$_, el sistema pensará que está creando una etiqueta personalizada.Como en este ejemplo:

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

Y si vas y editar esa entrada de la agenda en el iPhone, que se mostrará en una lista separada de etiquetas personalizadas. (Así que habrá 2 opciones para 'otro', una en los valores predeterminados y otra en las etiquetas personalizadas)

Si bien esto no ha respondido a su pregunta, espero que ayude.

+0

Lo siento, pensé que ya había comentado sobre esto antes, probablemente me olvidé de presionar el botón. Gracias por su explicación, creo que es fantástico y confirma lo que estaba pensando. – rnistuk

1

Esto es prácticamente lo mismo en el nuevo CNContact framework que reemplazó a ABAddressBook como la forma recomendada de manejar contactos.

Hay seis etiquetas predeterminadas que Apple ofrece, que son referenciadas con phone-specific CNLabelledValue constants:

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

La inclusión de _$!< y >!$_ alrededor de cinco de estos concursantes es más probable un marcador que las cadenas pueden ser localizados por el sistema operativo, dada la disponibilidad del método localizedString(forLabel:). Creo que el motivo por el que estos delimitadores no aparecen en el iPhone es porque Apple no localiza el iPhone, que se muestra como "iPhone" en todos los idiomas.

El comportamiento sensato sería ocultarlos cuando se muestra la cadena, que ocurre usando localizedString(forLabel:), continúe almacenando estos delimitadores con la cadena si está editando la entrada y asigne cualquier etiqueta creada por el usuario a estas cadenas donde estaba la etiqueta personalizada igual al cuerpo principal de estos, es decir, Móvil, Principal, Buscapersonas, etc.

Cuestiones relacionadas