Как добавить два телефонных номера в адресную книгу, используя pyObjc?
Я пытался добавить и рабочий, и домашний телефонные номера в адресную книгу Mac, используя python и pyObjC. Я считаю, что вам нужно добавить многозначный объект, но я не уверен, как это сделать с помощью pyobjc. Вот пример кода, который я собрал до сих пор:
import AddressBook
from AddressBook import *
ab = AddressBook.ABAddressBook.sharedAddressBook()
p = ABPerson.alloc().init()
p.setValue_forProperty_('JOE', kABFirstNameProperty)
p.setValue_forProperty_('TEST', kABLastNameProperty)
homephoneNumberMultiValue = ABMultiValueCreateMutable()
homephoneNumberMultiValue = ABMultiValueAddValueAndLabel(homephoneNumberMultiValue, '555-555-1212', kABPersonPhoneMobileLabel);
p.setValue_(kABPersonPhoneProperty, homephoneNumberMultiValue);
workphoneNumberMultiValue = ABMultiValueCreateMutable()
workphoneNumberMultiValue = ABMultiValueAddValueAndLabel(workphoneNumberMultiValue, '555-555-1213', kABPersonWorkMobileLabel);
p.setValue_(kABPersonPhoneProperty, workphoneNumberMultiValue);
ab.addRecord_(p)
ret = ab.save()
1 ответ
Решение
Именно по этой причине MultiValue называется multi-value - один объект, несколько значений. Вам не нужно создавать два отдельных объекта.
Смотрите этот пример:
import AddressBook
from AddressBook import *
ab = AddressBook.ABAddressBook.sharedAddressBook()
p = ABPerson.alloc().init()
p.setValue_forProperty_('JOE', kABFirstNameProperty)
p.setValue_forProperty_('TEST', kABLastNameProperty)
phoneNumberMultiValue = ABMultiValueCreateMutable()
ABMultiValueAdd(phoneNumberMultiValue, '555-555-1212', kABPhoneMobileLabel, None);
ABMultiValueAdd(phoneNumberMultiValue, '555-555-1213', kABPhoneWorkLabel, None);
p.setValue_forProperty_(phoneNumberMultiValue, kABPhoneProperty);
ab.addRecord_(p)
ret = ab.save()
Другими словами, вы создаете одно значение MultiValue и добавляете туда разные значения под разными метками. Этот пример протестирован и работает на 10.8.3 с python 2.7.