我在 AddressBook 中创建了一个名为“Qref”的自定义属性。我可以使用 [ABPerson properties]
检查它是否存在,并且对于我编写的任何测试应用程序来说它始终存在。
顺便说一句,您无法删除自定义属性,因为 [ABPerson removeProperties]
尚未实现。如果有的话请告诉我,因为我需要删除一个我输错名字的人。
我使用此代码设置了属性值。
ABPerson *p = <person chosen from a PeoplePicker>;
NSError *e;
if (![p setValue: aString forProperty:@"Qref" error:&e]) {
[NSAlert alertWithError:e]runModal;
}
(我从未见过该警报,但有时会在控制台中收到一堆错误消息。)
此时,我可以离开 PeoplePicker 中的人员并返回以找到正确设置的值。
如果我检查 [[ABAddressBook sharedAddressBook] hasUnsavedChanges]
结果为“否”,因此显然更改自定义属性值不算作更改,因此我通过插入虚拟人来强制保存(请建议更好的方法),然后执行
[[ABAddressBook sharedAddressBook] save];
如果 AddressBook 正在运行,虚拟人员会立即出现在其中,所以事情是正确的。但是当我关闭应用程序并再次运行它时,我发现我设置的值已经消失了。 (MacOSX-Lion)
最佳答案
我一直在找错树。事实证明,我无法保存任何属性,无论它们是否是自定义的。然后我想知道这是否与代码签名、权利或 iCloud 有关,这对我来说是难以穿越的丛林。
您从 PeoplePicker 获取的人员似乎与任何地址簿都没有关联,因此 [[ABAddressBook sharedAddressBook] save]
将不执行任何操作。您必须从 ABAddressBook 实例获取您的人员。这是有效的框架,没有任何错误检查。
ABPerson *p = [[myPeoplePicker selectedRecords] objectAtIndex:0];
NSString *uid = p.uniqueId;
ABPerson *editablePerson =
(ABPerson*) [[ABAddressBook sharedAddressBook] recordForUniqueId:uid];
// Typecast because it returns an ABRecord. Can anyone improve?
[editablePerson setValue:@"ABCD" forProperty:@"Qref"]; // my custom property
[[ABAddressBook sharedAddressBook] save];
关于macos - 如何才能保留为 AddressBook 中的自定义属性设置的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097179/