Учитывая эту пару ключ / значение:
FirstName = "Steve"
Я бы хотел установить свойство ABPerson в адресной книге iPhone следующим образом:
ABRecordSetValue(person, kABPersonFirstNameProperty, @"Steve", nil);
Проблема в том, что я не всегда буду знать, какой ключ отправлен. (Это будет эквивалентно константе свойства без «kABPerson» перед ним и «Property» после него).
Отправленный ключ может иметь любое количество свойств: «JobTitle», «Note» и т. Д.
Как перевести этот ключ в константу свойства адресной книги. то есть:
FirstName to kABPersonFirstNameProperty
.
Я думал, что смогу использовать Key Value Coding, но я не знаю, как реализовать это в этом случае.
Ради эффективности кодирования я стараюсь избегать использования длинного оператора Switch
или массива, заполненного каждым возможным свойством.
Обновление
Я обнаружил, что мне нужно получить доступ к константе по ее строковому представлению. Но я не знаю, возможно ли это. Так что kABPersonJobTitleProperty
- это константа, равная 18
. Поэтому я хотел бы, чтобы следующий код работал:
NSString *fieldName = [NSString stringWithString:@"JobTitle"];
NSString *propertyName = [NSString stringWithFormat:@"kABPerson%@Property", fieldName];</p>
<p>ABRecordRef person = ABPersonCreate();
ABRecordSetValue(person, propertyName, @"Fisherman", nil);
Конечно, выполнение этого возвращает это предупреждение Передача аргумента 2 'ABRecordSetValue' делает целое число из указателя без приведения . Поскольку строка propertyName
не преобразуется в целое число или константу, которую она ищет.
Может кто-нибудь увидеть способ сделать эту работу?
Моя настройка аналогична приведенному здесь вопросу:
Кодирование значения ключа
Я получаю XML-данные, которые я контролирую, и превращаю их в свойства записи адресной книги.