如何使用 pyObjc 将两个电话号码添加到地址簿



我一直在尝试使用python和pyObjC在Mac AddressBook中添加"工作"和"家庭"电话号码。我相信您需要添加一个多值对象,但我不确定如何使用 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()

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

换句话说,您创建一个多值,并在不同的标签下添加不同的值。此示例经过测试,并使用 python 2.7 在 10.8.3 上运行。

最新更新