iOS2011. 12. 26. 14:10


iOS에서 주소록에 접근하기 위해 제공하는 방안중에 UI를 통한 방법외에 데이터베이스에 직접 접근할 수 있는 방법을 제공한다. 주소록에 직접접근하는 만큼 사용자의 정보를 유의하여 사용해야 한다. 한번 수행한 작업을 되돌릴수는 없기 때문이다.

레코드아이디를 통한 사용법
DB내의 모든 레코드들은 유일한 아이디값을 가진다. 이 값은 항상 동일한 레코드에 대한 참조를 제공하고 해당 레코드가 삭제되거나 MobileMe동기화로 리셋되더라도 유지된다. 쓰래드레벨에서 안전하며 서로 다른 디바이스에 대해서는 보장하지 않는다.
각 레코드에 대한 추천되는 레퍼런스유지 방법은 first, last name을 유지하는 것이다. 추가로 아이디정도를 유지하는것을 추천한다. 검색할 때 레코드아이디로 해당 레코드의 names을 비교하여 다르면 names로 새로 레코드아이디를 얻은 후 아이디를 저장하여 나중에 사용한다.

ABRecordGetRecordID로 레코드 아이디를 얻을 수 있다. 레코드아이디로 persion을 찾으려면 ABAddressBookGetPersonWidthRecordID를 사용한다. 아이디로 그룹을 얻으려면 ABAddressBookGetGroupWithRecordID fmf tkdydgksek. persion을 이름으로 찾으려면 ABAddressBookCopyPeopleWithName을 사용한다.

Persion 레코드 활용하기

ABAddressBookAddRecord와 ABAddressBookRemoveRecord로 주소록 database에서 레코드를 추가 또는 삭제할 수 있다.

주소록 DB에서 person 레코드를 얻는데는 두가지 방법이 있다. ABAddressBookCopyPeopleWithName과 ABAddressBookGetPersonWithRecordID이다. 다른 종류의 검색을 원한다면 ABAddressBookCopyArrayOfAllPeople과 이어서 filteredArrayUsingPredicate메소드를 이용해서 원하는 결과를 얻을 수 있다.

people의 array를 정렬하려면 CFArraySortValues를 ABPersonComparePeopleByName를 비교자로 하고 ABPersonSortOrdering를 context로 사용하면 된다. 

다음은 주소록 DB전체를 정렬하는 예제이다.



Group 레코드로 작업하기

레코디아이디로 특정 그룹을 검색할 수 있다. ABAddressBookGetGroupWithRecordID를 통해서. ABAddressBookCopyArrayOfAllGroups를 통해서 모든 그룹을 array로 검색할 수 도 있다. 또한 전체 그룹의 개수를 ABAddressBookGetGroupCount로 알아낼 수 있다.

그룹의 멤버를 수정할수 있다. 그룹에 persion을 추가하려면 ABGroupAddMember로 하면 되고 제거하려면 ABGroupRemoveMember로 할 수 있다. persion한명이 그룹에 추가되기전에 반드시 주소록 DB에 존재해야 한다. 


 

Posted by 삼스