Что такое ABMultiValueAddValueAndLabel outIdentifier?

Я работал с этим методом AddressBook, и я не понимаю, для чего используется outIdentifier:

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

Документы не проясняют для меня вещи:

outIdentifier

Адрес, по которому нужно разместить идентификатор добавленной стоимости. Передайте NULL, чтобы игнорировать идентификатор.

Кто-нибудь знает, для чего используется этот параметр?

Заранее спасибо!

1 ответ

Решение

Я провел небольшое исследование по этому поводу, и наполовину удивлен этим странным параметром.

Поэтому я пошел в Xcode, импортировал фреймворк и нашел документацию для ABMultiValueIdentifier. Это оно:

ABMultiValueIdentifier

Определяет многозначные свойства.

typedef int32_t ABMultiValueIdentifier;

Обсуждение См. "Неверный идентификатор многозначного свойства".

Доступность Доступно в iOS 2.0 и более поздних версиях. Объявлено в ABMultiValue.h

Первое, что я заметил, это то, что это типа int32_t, Это означает, что это действительно указатель на значение (также обратите внимание на *outIdentifier)

Внизу определение константы, kABMultiValueInvalidIdentifier, Документация гласит:

Это определение препроцессора идентифицирует многозначное свойство со значениями, тип которых не соответствует объявленному типу.

Эта константа меня смущает, но я чувствую, что outIdentifier может быть указателем на местоположение значения. Возможно, что это способ изменить значения в неизменяемом ABMultiValueRef с помощью указателя на значение. Это также может быть проверка, если вы уже добавили значение.

Как вы уже видели, способ создания ABAddressBookRef заключается в использовании ABAddressBookCreateWithOptions(NULL, nil), Параметр NULL зарезервирован, и вам предлагается использовать NULL в документации. Вероятно, это то, что Apple использует для своей внутренней работы. Вполне возможно, что outIdentifier - это еще один секретный параметр, который Apple использует и не хочет, чтобы разработчики.

Однако, так как в этом случае он не говорит "Ограничено", я предполагаю, что этот outIdentifier является указателем на значение, поэтому его можно изменить. Я всегда сдавал ноль, и для стабильности это может быть разумно и для вас. Я никогда не видел, чтобы кто-либо использовал этот параметр с тех пор, как начал использовать адресную книгу.

Я был очень заинтригован, потому что я никогда не думал спросить, для чего это.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ- Я не уверен, что я прав. Это не более чем обоснованное предположение, основанное на том, что я прочитал в документации, и на опыте работы с фреймворком.

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