http://blogs.embarcadero.com/ao/2012/01/24/39203


iOS Address Book fun

Getting data out of the iOS address book is a lot harder than I thought… Must make component… ;)

Here’s a Q&D routine I managed to eek out today. It simply prints all contacts and all their numbers to the log console.

Enjoy!

uses
  iPhoneAll, AddressBook, CFArray, CFBase;

procedure DumpAddressBook;
var
  addressBook : ABAddressBookRef;
  allPeople : CFArrayRef;
  nPeople : CFIndex;
  ref : ABRecordRef;
  i, j : Integer;
  firstName : CFStringRef;
  lastName : CFStringRef;
  phoneNumber : CFStringRef;
  l, v : CFStringRef;
  S : NSString;
begin
  addressBook := ABAddressBookCreate;
  allPeople := ABAddressBookCopyArrayOfAllPeople(addressBook);
  nPeople := ABAddressBookGetPersonCount(addressBook);

  for i:=0 to nPeople-1 do begin
    ref := CFArrayGetValueAtIndex(allPeople,i);

    firstName := ABRecordCopyValue(ref,kABPersonFirstNameProperty);
    lastName := ABRecordCopyValue(ref,kABPersonLastNameProperty);
    if firstName <> nil then
      if lastName <> nil then
        S := NSString.stringWithFormat(NSSTR(PChar('%@, %@')),lastName,firstName)
      else
        S := NSString.stringWithFormat(NSSTR(PChar('%@')),firstName)
    else
      if lastName <> nil then
        S := NSString.stringWithFormat(NSSTR(PChar('%@')),lastName);
    NSLog(S);

    phoneNumber := ABRecordCopyValue(ref, kABPersonPhoneProperty);
    for j:=0 to ABMultiValueGetCount(phoneNumber)-1 do begin
      l := ABMultiValueCopyLabelAtIndex(phoneNumber,j);
      v := ABMultiValueCopyValueAtIndex(phoneNumber,j);
      S := NSString.stringWithFormat(NSSTR(PChar('%@: %@')),l,v);
      NSLog(S);
      CFRelease(l);
      CFRelease(v);
    end;

    if phoneNumber <> nil then
      CFRelease(phoneNumber);
    if firstName <> nil then
      CFRelease(firstName);
    if lastName <> nil then
      CFRelease(lastName);
  end;
end;

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 17791
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 16159
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 18808
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 24375
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 25762
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 21121
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 41703
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 177007
43 함께 축하해요! 델파이 25주년!! #Delphi25th file 관리자 2020.02.14 318
42 [발표자료] 20150910 "RAD Studio 10 시애틀" 출시 기술 워크샵 관리자 2015.09.11 316
41 데브기어 기술레터 - 2017년 1월 관리자 2016.12.30 312
40 [고객사례-유틸리티, 델파이] IcoFX 관리자 2020.02.20 305
39 스레드 사용시 로긴오류 나마 2020.09.03 304
38 개발자가 지원해야 하는 핵심 플랫폼들 관리자 2020.11.02 302
37 RAD스튜디오와 델파이 – 원조 로우코드! 관리자 2020.10.23 300
36 iOS 개발환경 설정이 잘 되지 않은 경우 체크사항 - iOS 버전 확인 필요 관리자 2019.07.11 298
35 XML MAPPER 업데이트 관리자 2020.10.21 293
34 [엠바카데로 UX SUMMIT] 눈여겨 봐야할 컨텐츠들! 관리자 2020.10.06 293
33 이 달의 기술자료 - 2020년 04월 험프리 2020.03.27 293
32 [행사] 첫번째 "델파이 마이그레이션 DAY" 회고 험프리 2019.12.05 292
31 초대합니다! 새로운 RAD Studio : 윈도우 10 혜택을 누리세요! file 관리자 2015.08.28 292
30 DELPHICON 2020, 곧 시작됩니다! file 관리자 2020.10.27 291
29 검사(Audits)와 측정(Metrics) 기능을 이용 소스코드 표준과 규약 준수를 측정하고 개선할 수 있습니다. 험프리 2020.03.06 289
28 [고객사례-유틸리티, 델파이] ALLMediaServer - 미디어 컨텐츠 플레이 프로그램 관리자 2020.01.31 289
27 RAD서버 활용하기 (엠바카데로 아카데미 코스) 관리자 2020.01.06 288
26 [FMX] 파이어몽키 메시징 시스템을 이용해 프로세스 내에서 메시지를 등록하고 구독하는 방법 file 험프리 2017.09.01 287
25 [개발팁] TBooleanHelper.ToString 그리고 TUseBoolStrs 관리자 2019.10.21 286
24 오래된 C++ 프로젝트 마이그레이션 하기 관리자 2019.09.05 286