Настройка свойств человека

Работа над чужим кодом. Я действительно смущен тем, что именно происходит в этом коде.

ABAddressBookRef addressBook = ABAddressBookCreate(); 
ABRecordRef persons = ABAddressBookGetPersonWithRecordID(addressBook, x);
CFErrorRef *error=NULL;
ABAddressBookRemoveRecord(addressBook, persons, error);
ABAddressBookSave(addressBook, error);

ABRecordRef persons = ABPersonCreate(); 

ABRecordSetValue(persons, kABPersonFirstNameProperty, firstName , nil);

Что нужно сделать, так это создать человека ABRecordRef. Его свойства должны быть установлены, и его запись/детали должны отображаться. Он никогда не должен быть сохранен в адресной книге. Это способ сделать это. Нужна помощь.

Редактировать: Помимо установки свойств для человека, добавляется следующий код, чтобы подтолкнуть контроллер представления к просмотру человека.

MyContactDetailViewcontroller *personContactDetail = [[MyContactDetailViewcontroller alloc] init];
personContactDetail.displayedPerson = persons; 
personContactDetail.passedSelectedContactData = selectedContactsOnlyData;
[self.navigationController pushViewController:personContactDetail animated:YES];
[personContactDetail release];

MyContactDetailViewcontroller подкласс ABPersonViewController. Или лучше использовать ABUnknownPersonViewController.

Находите ли вы случаи, когда контакты могли дублироваться в адресной книге?


person Xavi Valero    schedule 30.04.2012    source источник


Ответы (1)


Это именно то, что здесь происходит.. Я объясню..

ABAddressBookCreate создает новую адресную книгу на основе данных из базы данных адресной книги, поэтому любые изменения, которые вы вносите в ABAddressBookRef, будут сохранены в фактической базе данных адресной книги только после вызова ABAddressBookSave(). поэтому он получает ссылку на человека с идентификатором записи- x. Чем вы создаете новую запись человека, используя

ABRecordRef persons = ABPersonCreate(); 

и чем вы устанавливаете его значение, но оно доступно для этого конкретного объекта и не сохраняется в базе данных, если вы не вызываете... ABAddressBookSave()

надеюсь, это поможет вам... :)

person Ankit Srivastava    schedule 30.04.2012
comment
Когда вызывается ABAddressBookSave(), человек фактически сохраняется в адресной книге, и любые изменения его свойств также будут отражены в адресной книге. Это так? - person Xavi Valero; 30.04.2012
comment
ABAddressBookSave() не вызывается после того, как человек был создан, поэтому НЕТ. Если вы вызовете ABAddressBookSave() снова, чем YES (только изменения, которые вы сделали до этого момента). - person Ankit Srivastava; 30.04.2012
comment
ABAddressBookSave(addressBook, error);. Что делает этот кусок кода. Спасает ли это человека без каких-либо свойств? - person Xavi Valero; 30.04.2012
comment
Первый параметр указывает, какой экземпляр вы хотите реплицировать в базу данных адресной книги, а второй указывает, что любая сгенерированная ошибка будет сохранена в базе данных... для получения дополнительной информации см. это... developer.apple.com/library/ios/#DOCUMENTATION/AddressBook/< /а> - person Ankit Srivastava; 30.04.2012
comment
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые контакты дублируются в адресной книге. Я не уверен, имеет ли место дублирование в приведенном выше фрагменте кода. Что касается приведенного выше кода, он не должен сохранять контакты в адресной книге. - person Xavi Valero; 30.04.2012