gpt4 book ai didi

macos - 如何才能保留为 AddressBook 中的自定义属性设置的值?

转载 作者:行者123 更新时间:2023-12-03 17:58:25 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com