2015-04-10 3 views
0

с помощью iPhone 6 под управлением IOS 8.2IOS AddressBook связан счета отчеты не отображаются в отсортированной копии

я добавил учетную запись GMAIL через настройку ОС, а контакты (~ 350) для Gmail отображается в моем списке контактов ,

Я также добавил 3 новых контакта непосредственно через телефон.

Если я пытаюсь ими программным получить все контакты через Objective-C все они возвращаются

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil); 
NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBookRef); 

Если я пытаюсь получить их с порядком сортировки [via this question], только 3 записей я добавил через телефон объявиться. Gmail не возвращаются.

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil); 
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBookRef); 
NSArray *sortedContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBookRef, source, kABPersonSortByFirstName); 

Редактировать: Не имеет значения, сортирую ли я по имени или фамилии, возвращаются те же 3 записи.

Я делаю что-то неправильное или мне нужно каким-то образом вызвать индекс на gmail Records?

Edit 2: _bridge к __bridge_transfer

ответ

1

Ваших трех IOS контактов и вашим GMAIL контактов, несомненно, разные источники. Ваш второй пример кода эффективно говорит: «Мне не нужен источник gmail, просто получайте контакты из источника по умолчанию».

В ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering, если вы передадите NULL для источника, он получит все контакты. Я так и не нашел документацию об этом поведении, поэтому всегда получаю все контакты через ABAddressBookCopyArrayOfAllPeople, а затем сортирую их самостоятельно.

+0

любая разница в производительности для сортировки по сравнению с родной api? – MattoTodd

+0

Быстрый тест показывает, что с ~ 3,300 контактов на iPhone 6+, работающем под управлением iOS 8.3, потребовалось 21 мс, используя встроенную сортировку и 34 мс вручную их сортировку. Таким образом, похоже, что собственный API немного быстрее, но не так заметно в практических приложениях. – Rob

+0

это было быстро. благодаря!! – MattoTodd