2011-09-28 6 views
1

저는 현재 사용자가 앱의 연락처 세부 정보 (주로 숫자)를 수정할 수 있도록하는 앱을 작성하고 있으며 이러한 수정 사항은 주소록에 직접 반영되어야합니다.주소록의 연락처 번호를 프로그래밍 방식으로 수정하는 방법은 무엇입니까?

인터넷을 통해 철저히 검색했지만 찾은 모든 예는 연락처를로드하거나 새 연락처를 추가하는 것이지만 기존 연락처를 수정하는 것은 아닙니다.

또한 여러 연락처가 저장된 경우 한 연락처의 모든 전화 번호 목록을 어떻게 얻을 수 있습니까?

감사합니다.

답변

0

사용자가 세부 정보를 직접 편집 할 수있게하려면 Apple's documentation on displaying and editing a person record을 참조하십시오. 첫 번째 섹션에서는 "ABPersonViewControllerDelegate 프로토콜을 채택해야하는 대리자를 설정합니다. 사용자가 레코드를 편집 할 수있게하려면 allowsEditing을 YES로 설정하십시오." 예를 들어

: 그 편집하지 않고 사람의 세부 사항을 표시하기 위해 필요한 allowsEditing를 설정하는 것보다

ABPersonViewController *personViewController = [[ABPersonViewController alloc] init]; 
personViewController.personViewDelegate = self; 
personViewController.allowsEditing = YES; 

기타, 코드가 정확히 같은 것이다. 이 코드는 this answer에서 가져 와서 주소록에서 연락처를 삭제하는 것과 관련된 더 자세한 예를 보여줍니다.

그러나 제목이 프로그래밍 방식으로 수행되는 것을 참조합니다. 애플의 Address Book Programing Guide for iOS은 "사용자가 궁극적으로 주소록 데이터베이스를 소유하고 있으므로 응용 프로그램이 예상치 못한 변경을하지 않도록주의해야한다. 일반적으로 변경은 사용자가 시작하거나 확인해야한다."

그러나 가능합니다. 다음 예는 해당 문서의 17 페이지에 나와 있습니다.

ABRecordRef aRecord = ABPersonCreate(); 
CFErrorRef anError = NULL; 
bool didSet; 

didSet = ABRecordSetValue(aRecord, kABPersonFirstNameProperty, CFSTR("Katie"), &anError); 
if (!didSet) {/* Handle error here. */} 

didSet = ABRecordSetValue(aRecord, kABPersonLastNameProperty, CFSTR("Bell"), &anError);  
if (!didSet) {/* Handle error here. */} 

CFStringRef firstName, lastName; 
firstName = ABRecordCopyValue(aRecord, kABPersonFirstNameProperty); 
lastName = ABRecordCopyValue(aRecord, kABPersonLastNameProperty); 
/* ... Do something with firstName and lastName. ... */ 

CFRelease(aRecord); 
CFRelease(firstName); 
CFRelease(lastName);