2010-11-08 5 views
2

Я создаю приложение, которое синхронизирует контакты из онлайн-источника. Все работает отлично, до сих пор ... когда телефон имеет одну адресную книгу:ABAddressBook - несколько адресных книг?

ABAddressBookRef addressBook = ABAddressBookCreate(); 
ABRecordRef group1 = ABGroupCreate(); 
ABRecordSetValue(group1,kABGroupNameProperty,@"Group1",nil); 
ABAddressBookAddRecord(addressBook,group1,nil); 
ABAddressBookSave(addressBook,nil); 

ABRecordRef person = ABPersonCreate(); 
// Edit person values... 

ABGroupAddMember(group1,person,nil); 
ABAddressBookAddRecord(addressBook,person,nil); 
ABAddressBookSave(addressBook,nil); 
CFRelease(person); 
CFRelease(addressBook); 

Проблема возникает, однако, когда телефон уже есть несколько адресных книг. Я тестирую на телефоне, который имеет одну адресную книгу для всех контактов, одну для Gmail и т. Д. Когда я добавляю контакт указанным выше образом, он добавляет его в адресную книгу Gmail и в процессе разбивает идентификатор «Group1» от контакта. Есть ли способ изменить ABAddressBookRef, чтобы указать на конкретную адресную книгу в телефоне?

ответ

0

В соответствии с reference, ABAddressBookCreate всегда возвращает объект адресной книги, заполненный из базы данных адресной книги системы. Это означает, что есть только одна адресная книга, даже если у вас есть несколько экземпляров ABAddressBook, которые вы используете для взаимодействия с ним.

0

Майк, вы можете захотеть взглянуть на этот пост: Obtaining Specific ABSource from ABAddressBook in iOS 4+

Хотя я считаю, Алекс прав, что есть только когда-либо один адрес книги, что адресная книга может состоять из нескольких источников (ABSource). И в iOS 4+ можно специфически идентифицировать и манипулировать определенными источниками.