1

我一直在使用这个 AddressBook 方法,但我不明白 outIdentifier 的用途是什么:

bool ABMultiValueAddValueAndLabel (
   ABMutableMultiValueRef multiValue,
   CFTypeRef value,
   CFStringRef label,
   ABMultiValueIdentifier *outIdentifier
);

文档并没有为我清除一些东西:

出标识符

放置附加值标识符的地址。传递 NULL 以忽略标识符。

有人知道这个参数是做什么用的吗?

提前致谢!

4

1 回答 1

1

我对此做了一些研究,对这个奇怪的参数感到惊讶。

所以我进入了 Xcode,导入了框架,并找到了 ABMultiValueIdentifier 的文档。就是这个:

AB多值标识符

标识多值属性。

typedef int32_t ABMultiValueIdentifier;

讨论 请参阅“无效的多值属性标识符”。

可用性 适用于 iOS 2.0 及更高版本。在 ABMultiValue.h 中声明

我注意到的第一件事是它是 type int32_t。这意味着它确实是一个指向值的指针(还要注意*outIdentifier

下面是常数的定义,kABMultiValueInvalidIdentifier。文件说,

此预处理器定义标识其类型与其声明类型不匹配的值的多值属性。

这个常数让我感到困惑,但我觉得 outIdentifier 可能是指向值位置的指针。这可能是一种通过使用指向值的指针来更改不可变 ABMultiValueRef 中的值的方法。它也可能是检查您是否已经添加了值。

如您所见,创建 ABAddressBookRef 的方式是使用ABAddressBookCreateWithOptions(NULL, nil). NULL 参数是保留的,您被告知在文档中使用 NULL。这很可能是 Apple 用于其内部运作的东西。outIdentifier 可能是 Apple 使用且不希望开发人员使用的另一个秘密参数。

但是,由于在这种情况下没有说 Restricted,我猜测这个 outIdentifier 是一个指向该值的指针,因此可以更改它。我总是通过零,为了稳定,你也可能很聪明。自从我开始使用通讯簿以来,我从未见过有人使用此参数。

我最感兴趣是因为我从未想过要问它是干什么用的。

免责声明- 我不确定我是否正确。这只是基于我在文档中阅读的内容和我对框架的经验的有根据的猜测。

于 2014-03-13T22:40:31.200 回答