AbaddressbookCopyArrayoFallpeople и AbaddressbookgetPersoncount Возвращение разных размеров

У меня есть приложение, которое иногда сбивается из-за массива, возвращаемого AbaddressbookCopyarrayoFallpeoplensourceWithsortordoring (), имея другой размер для AbaddressbookgetPersonCount (). Оболочка кода показана ниже. Обычно NPeople - это тот же размер, что и массив. Однако на iPhone одного пользователя (или, по крайней мере, как сообщается одним пользователем), NPeople почти вдвое больше. Я могу остановить аварию, используя размер массива, а не AbaddressbookgetPersonCount (). Однако я не уверен, что это означает, что я не доступа к всем контактам в iPhone.

  • Кто-нибудь сталкивался с этим вопросом раньше?
  • Почему числа будут разными?

Я задавался вопросом, было ли это что-то связано с контактами, хранящимися в группах (я не знаю, что есть группы - просто идея). Кроме того, из адреса электронной почты пользователя я подозреваю, что они используют MobileMe. Я задавался вопросом, если синхронизация с MobileMe создаст дубликаты с другим RelectID, но не удалять существующий контакт, по крайней мере, не так далеко, как abaddressbookgetPersoncount ().

Редактировать: Я посмотрел в это еще несколько и иметь довольно хорошую идею по причине проблемы. Как я хотел отсортированный массив контактов, я использовал AbaddressBookCopyarrayoFallpeopleinsourceWithSortordoring (). Это требует адресного источника книги - я использовал источник по умолчанию. Я считаю, что могут быть различные источники - местный источник плюс другие, такие как Exchange и Mobileme. Поэтому мой массив в конечном итоге окажется только на местных контактах, в то время как номер, возвращенный AbaddressbookgetPersonCount (), будет включать все источники - отсюда, в моем краю. Поэтому, я думаю, было бы лучше просто работать с локальными данными в моем приложении и использовать размер массива, возвращаемый AbaddressbookCopyarrayoFallpeopleinsourceWithsortordoring, а не AbaddressbookgetPersonCount.

CFArrayRef allPeople = InSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName);  

    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

    for (int i = 0; i < nPeople; i++) 
    {
        ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
    }   
6
задан Somnath Muluk 26 March 2012 в 06:24
поделиться