Использование iOS Addressbook api для поиска по обмену контактами
Я занимаюсь разработкой приложения, в котором я хотел бы искать контакт для обмена по имени (аналогично тому, что делает приложение телефонных контактов), проходя через API AddressBook для iOS, а также для поиска в сети. Я до сих пор не могу понять, как использовать API адресной книги iOS. искать обмен контактами. Я мог только найти, что адресная книга предоставила информацию, что источник ABS доступен для поиска, но не предоставляет, как искать. Если любое тело может помочь, это очень ценится. Большое спасибо заранее.. Я уже давно борюсь с этим..
Я также пытался настроить ABPeoplePicker, но без особой помощи.
1 ответ
Подход, который я использовал для решения этой проблемы, заключался в том, чтобы найти нужные записи ABSource, затем использовать их для получения записей ABPerson в источнике, затем создать некоторые структуры данных и отфильтровать их с помощью NSPredicate. Возможно, немного запутанным, но, кажется, работает.
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef sources = ABAddressBookCopyArrayOfAllSources(addressBook);
CFIndex sourcesCount = CFArrayGetCount(sources);
ABRecordRef sourceToSearch = NULL;
for (CFIndex index = 0; index < sourcesCount; index++)
{
ABRecordRef record = (ABRecordRef)CFArrayGetValueAtIndex(sources, index);
NSNumber *sourceTypeNumber = (__bridge NSNumber *)(CFNumberRef)ABRecordCopyValue(record, kABSourceTypeProperty);
ABSourceType sourceType = [sourceTypeNumber intValue];
if (sourceType == 4) //this was the only source type with people on my phone, I guess you'll use kABSourceTypeExchange instead
{
sourceToSearch = record;
break;
}
}
CFArrayRef peopleInRecord = (CFArrayRef)ABAddressBookCopyArrayOfAllPeopleInSource(addressBook, sourceToSearch);
CFIndex peopleCount = CFArrayGetCount(peopleInRecord);
NSMutableArray *peopleDictionaries = [NSMutableArray array];
for (CFIndex index = 0; index < peopleCount; index++)
{
ABRecordRef personRecord = CFArrayGetValueAtIndex(peopleInRecord, index);
ABRecordID recordID = ABRecordGetRecordID(personRecord);
NSString *personName = (__bridge NSString *)(CFStringRef)ABRecordCopyValue(personRecord, kABPersonFirstNameProperty);
if (personName)
{
NSDictionary *personDictionary = @{ @"recordID" : [NSNumber numberWithInt:recordID], @"name" : personName };
[peopleDictionaries addObject:personDictionary];
}
}
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"name",@"Kyle"];
NSArray *kyles = [peopleDictionaries filteredArrayUsingPredicate:predicate];
NSLog(@"filtered dictionarys = %@",kyles);
/*
2012-08-27 17:26:24.679 FunWithSO[21097:707] filtered dictionaries = (
{
name = Kyle;
recordID = 213;
}
)*/
//From here, get the recordID instance and go get your ABPerson Records directly from the address book for further manipulation.
Надеюсь, это поможет, дайте мне знать, если у вас есть какие-либо вопросы!