2014-01-27 6 views
1

ABPerson имеет api, чтобы получить все «связанные» записи человека.Могут ли записи адресной книги быть связаны программно?

CFArrayRef ABPersonCopyArrayOfAllLinkedPeople (
    ABRecordRef person 
); 

Что определяет результат возврата этого вызова (т. Е. Как установлены ссылки)? Моя цель - создать новую запись в адресной книге (в коде), связанную с существующей записью.

+0

Нет публичного API для создания ваших собственных ссылок. Что вы пытаетесь достичь? У меня был успех в добавлении записи с тем же именем и фамилией, что и существующая запись, и структура адресной книги автоматически связала мою новую запись с существующей записью, но это не документировано нигде, насколько я знаю, поэтому я не уверен, насколько он надежный. – alivingston

+0

Я пытаюсь надежно написать новые данные для человека, выбранного из ABPeoplePickerNavigationController. Иногда ABRecordRef, возвращаемый после того, как пользователь выбирает кого-то, не может быть записано (вызовы ABRecordSetValue() завершаются с ошибкой «невозможно завершить ...»). Незаписываемые записи, похоже, связаны с записями, содержащими профили социальных сетей (например, Facebook). Поэтому я думал, что создаю новую запись с необходимыми данными и свяжу ее с выбранным человеком. Логика заключалась в том, что я всегда мог писать вновь созданную запись. Я подозреваю, что вы говорите правду. Я надеюсь, что Apple с обновлением этого жестокого старого API. – Swany

ответ

3

Я выполнил это, пытаясь записать информацию в рассматриваемый ABRecordRef, а также записи, связанные с ним. Если запись на все связанные записи не удалась для разрешения (например, если единственная запись является контактом Facebook), я создал новую запись с тем же именем и именем, что и существующие записи (записи) и связанная с ними адресная книга. Это поведение нигде не задокументировано, но без публичного метода связывания контактов это может быть единственный вариант.

+0

Если кто-то еще не предоставит больше информации об обратном, мы предположим, что alivingston является правильным и что связь между двумя или более ABRecords устанавливается автоматически, с тем же именем и фамилией. Если кто-то может пролить больше света на пределы этого, пожалуйста, поделитесь. Мне любопытно узнать механизм, с помощью которого это происходит. Я надеюсь, что вызов ABPersonCopyArrayOfAllLinkedPeople() не динамически выполняет сопоставление строк между несколькими полями всех записей в адресной книге. – Swany

+1

Это определенно не динамически возвращает связанных людей. Я потратил довольно много времени, пытаясь совать в адресной книге, чтобы обнаружить различные краевые случаи. Вы можете подключиться к контакту адресной книги, чтобы просмотреть связанные записи - если вы изменили имя связанной записи, они остаются связанными с их соответствующими записями. Единственный способ отключить их - это поместить приложение для контактов в режим редактирования и сказать ему, чтобы отключить их. Итак, в какой-то момент времени яблоко настраивает связь между ABRecords, и кажется, что отношения не удаляются, если явно не сделано этим пользователем. – alivingston

+0

Начиная с iOS 8.3 Я не могу воспроизвести эту функцию. Похоже, что он ушел полностью :( – Tim