2015-06-04 5 views
1

Я тестирую структуру iOS AddressBook, и я пытаюсь понять, что, как лучше всего извлечь значение на конкретном ярлыке и задавать вопрос в то же время, если порядок этих меток для любой случайной причины.Что такое заказ этикеток в ABMultiValueCopyLabelAtIndex()

Это то, что я делаю, когда я добавляю новый контакт или добавить к существующему:

let phone:ABMutableMultiValue = ABMultiValueCreateMutable(
     ABPropertyType(kABStringPropertyType)).takeRetainedValue() 
ABMultiValueAddValueAndLabel(phone, phoneNumber, kABPersonPhoneMainLabel, nil) 

И позже в вызове делегата на unknownPersonViewController() я это делаю:

let phone: ABMultiValueRef = ABRecordCopyValue(person, 
       kABPersonPhoneProperty).takeRetainedValue() 
firstPhone = ABMultiValueCopyValueAtIndex(phone, 0).takeRetainedValue() as! String 

Обратите внимание, что я предполагаю, что основная метка указана в индексе . Я знаю, что сравнение с меткой CFString возможно, но эти ярлыки выглядят забавными, давая мне это странное чувство кишки, когда сравнивает их снова. Итак, я не совсем уверен, как это сделать.

ответ

1

Вы не должны принимать какие-либо заказы. Вы должны прочитать значение метки. Они «выглядят смешно», но с ними легко справиться: они имеют форму "_$!<Label>!$_", где "_$!<" и ">!$_" - это просто разделители, на которые можно положиться.

+0

Также обратите внимание, что понятия «главная этикетка» не существует. Пользователь может иметь эти номера телефонов в любом порядке: у вас нет способа узнать, какой номер телефона считается «основным», если таковой имеется. – matt

+0

Хорошо, спасибо @matt за указание на это. Я хотел узнать это по чужим впечатлениям :) –

+0

Кстати, я этого не замечал до сих пор, но я большой поклонник вашей книги! Спасибо, что вложили в это невероятное усилие. –