Как добавить два телефонных номера в адресную книгу, используя 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.

Другие вопросы по тегам