Могат ли записите в адресната книга да бъдат свързани програмно?

ABPerson има API за получаване на всички „свързани“ записи на лица.

CFArrayRef ABPersonCopyArrayOfAllLinkedPeople (
   ABRecordRef person
);

Какво определя връщането на резултата от това повикване (т.е. как се установяват връзки)? Целта ми е да създам нов запис в адресната книга (в код), който е свързан със съществуващ запис.


person Swany    schedule 27.01.2014    source източник
comment
Няма публичен API за създаване на ваши собствени връзки. Какво се опитваш да постигнеш? Имах успех в добавянето на запис със същото име и фамилия като съществуващ запис и рамката на адресната книга автоматично свърза моя нов запис със съществуващия запис, но това не е документирано никъде, доколкото знам, така че не съм сигурен колко е надежден.   -  person alivingston    schedule 15.02.2014
comment
Опитвам се надеждно да напиша нови данни за човек, избран от ABPeoplePickerNavigationController. Понякога ABRecordRef се връща, след като потребителят избере, че някой не може да бъде записван (обажданията към ABRecordSetValue() са неуспешни с неуспешно завършване...). Записите, които не могат да се записват, изглежда са свързани записи, съдържащи профили в социални медии (като Facebook). Така че си помислих да създам нов запис с данните, които искам, и да го свържа с избраното лице. Логиката е, че винаги мога да напиша новосъздаден запис. Подозирам, че това, което казваш, е вярно. Надявам се, че Apple ще актуализира този кофти стар API.   -  person Swany    schedule 16.02.2014


Отговори (1)


Постигнах това, като се опитах да запиша информацията във въпросния ABRecordRef, както и записите, свързани с него. Ако писането във всички свързани записи не успее за разрешение (в случай, че единственият запис е контакт във Facebook, например), създадох нов запис със същото име и фамилия като съществуващите запис(и) и адресната книга ги свърза. Това поведение не е документирано никъде, но без публичен метод за свързване на контакти може да е единствената опция.

person alivingston    schedule 16.02.2014
comment
Освен ако някой друг не предостави повече информация за противното, ние ще приемем, че alivingston е прав и че връзката между два или повече ABRecords се установява автоматично чрез едно и също име и фамилия. Ако някой може да хвърли повече светлина върху ограниченията на това, моля, споделете. Интересно ми е да разбера механизма, по който става това. Надявам се, че извикването ABPersonCopyArrayOfAllLinkedPeople() не прави динамично сравнения на низове между множество полета на всички записи в адресната книга. - person Swany; 18.02.2014
comment
Определено не се връщат динамично свързани хора. Прекарах доста време в опити да се ровя в адресната книга, за да открия различни крайни случаи. Можете да разгледате контакт в адресната книга, за да разгледате свързаните записи - ако промените име на свързан запис, те остават свързани със съответните си записи. Единственият начин да прекратите връзката им е да поставите приложението за контакти в режим на редактиране и да му кажете да прекрати връзката им. И така, в някакъв момент от време Apple създава връзка между ABRecords и изглежда, че връзката не се премахва, освен ако не е направено изрично от потребителя. - person alivingston; 18.02.2014
comment
От iOS 8.3 не мога да възпроизведа тази функция. Изглежда, че е изчезнало напълно :( - person Tim; 21.04.2015
comment
@Tim Не съм ровил отново в това, откакто iOS 8 беше пуснат, и голяма част от поведението беше недокументирано - така че не е голяма изненада, ако нещо зад кулисите беше променено, което наруши част от поведението, което виждахме, като просто ровим наоколо . :( - person alivingston; 21.04.2015