2012-04-30 3 views
0

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

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.

ли вы какие-либо случаи, когда контакты могут быть продублированы в адресной книге

ответ

1

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

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

ABRecordRef persons = ABPersonCreate(); 

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

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

+0

Когда вызывается ABAddressBookSave(), человек фактически сохраняется в адресной книге, и любые изменения его свойств также отражаются в адресной книге. Это так? –

+0

ABAddressBookSave() не вызывается после того, как человек был создан так НЕТ. Если вы снова вызываете ABAddressBookSave(), а не YES (только изменения, которые вы сделали до этой точки). –

+0

'ABAddressBookSave (адресная книга, ошибка);'. Что делает этот кусок кода. Сохраняет ли он человека без каких-либо свойств? –