2012-11-08 7 views
2

ABPeoplePickerNavigationController과 비슷한보기를 구현할 때 목록을 매우 빨리 정렬 할 수 없습니다. 기본 주소록 앱은 목록을 즉시로드합니다. 나는 4000+ 접촉을 다루고 있으므로,로드 시간을 줄이는 것이 중요합니다. 많은 사용자 정의 UI 작업을 수행해야하므로 ABPeoplePickerNavigationController을 사용할 수 없습니다.iOS에서 정렬 된 연락처 목록을로드하는 가장 빠른 방법은 무엇입니까?

나는 ABAddressBookCopyArrayOfAllPeople을 사용하고 있었고 사람들을 UILocalizedIndexedCollation 섹션에 sectionForObject를 사용하여 배치 한 다음 sortedArrayFromArray을 사용하여 섹션을 정렬했습니다. 4000 연락처의 경우 약 8 초가 걸렸습니다.

I는 다음 ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering, ABAddressBookCopyArrayOfAllSources를 사용하는 모든 소스 절환 그때 UILocalizedIndexedCollation 동일한 기술을 이용하여, 정렬되지 않은 배열을 각 소스의 연락처를 추가. 이 시간은 약 5 초가되었습니다. 섹션이 이미 대부분 정렬되어 있기 때문에 추측 할 수 있습니다.

개선 할 방법이 있습니까? 내가 모르는 어떤 기술? 어떻게 든보기없이 ABPeoplePickerNavigationController 데이터 소스를로드하고 사용할 수 있습니까? 아니면 빠른 정렬 방법이 있습니까?

대단히 감사합니다.

답변

0

개선 할 방법이 있습니까?

4000 개의 이름을 즉시 표시 할 필요가 없음을 알 수 있습니다. 실제로 필요한 것은 사용자가보고있는 섹션의 이름 뿐이며이 이름을 찾아서 더 빨리 정렬 할 수 있습니다. 사용자가 처음에 A 섹션을 보았다고 가정 해 봅시다. A로 시작하는 이름을 선택하기 위해 술어를 사용할 수 있습니다. 4000 개의 이름 중 400 개에서 시작될 수 있으며, 정렬 시간을 몇 분의 1 초로 단축합니다. 둘째. 백그라운드에서 섹션 가져 오기 및 정렬을 계속할 수 있습니다.

요점은 모든 레코드를 정렬하는 데 얼마나 오랜 시간이 걸리지는 않는다는 점입니다. 중요한 것은 사용자가 원하는 레코드를 화면에 표시하는 데 얼마나 오래 걸리는지입니다.

+0

당신은 내가 그들을 표시 한 다음 전원을 정렬 할 필요까지 섹션 배열에서 해당 분류되지 않은 떠나지 말을하는지 도움이되기를 바랍니다? (우리가 얻지 못했던 사람들을 배경으로 계속하겠습니까?) 좋은 소식입니다. 감사합니다. – Stephanie

0

여기서 저장되는 연락처는 어디입니까? CoreData에 있습니까?

모든 것을 처리하는 NSFetchedResultsController와 함께 CoreData를 사용하므로 로딩 시간에 신경 쓸 필요가 없습니다. 왜냐하면 NSFetchedResultsController가 tableView의 현재 보이는 셀에 필요한만큼의 연락처를로드하기 때문입니다.

나는이 당신에게

Linard

그래서
+1

사과의 개인 핵심 데이터에 포함되어 있기 때문에 불행히도 이러한 방식으로 액세스 할 수 없습니다. – Stephanie

관련 문제