2014-01-05 4 views
0

내 응용 프로그램이 iOS 용 Addressbook 프레임 워크와 연결되어 있으며 연락처 정보를 얻고 있습니다.주소록 애플리케이션 만들기 - 이메일/전화 번호를 더 잘 처리하려면 어떻게해야합니까?

  • FIRSTNAME
  • LASTNAME
  • 회사 이름
  • 홈 이메일
  • 업무용 전자 메일
  • 집 전화
  • 직장 전화
  • 휴대폰

나는 내가 움켜 잡고있는 정보를 확장해야합니다. 앱에서 문제가되는 것은 앱의 사용자 데이터베이스에 연락처를 가져 오는 것입니다. 이런 경우, 둘 이상의 집 이메일 (또는 다른 이메일/전화 입력란)이 있으면 두 명의 사용자를 가져옵니다. 여기

내가 어쩌면 생각 나는 사전 또는 배열로가 있어야 내 사람 모델

#import <Foundation/Foundation.h> 
#import <AddressBook/AddressBook.h> 

@interface Person : NSObject 

@property (nonatomic, strong) NSString *firstName; 
@property (nonatomic, strong) NSString *lastName; 
@property (nonatomic, strong) NSString *fullName; 
@property (nonatomic, strong) NSString *homeEmail; 
@property (nonatomic, strong) NSString *workEmail; 


@property (nonatomic, strong) NSString *companyName; 
@property (nonatomic, strong) NSString *homePhone; 
@property (nonatomic, strong) NSString *workPhone; 
@property (nonatomic, strong) NSString *cellPhone; 

@property (nonatomic, strong) NSString *sortByName; // Used only for sorting 



@property (nonatomic) ABRecordID publicContactRecordId; 
@property (nonatomic) NSString *parseObjectId; 

- (NSComparisonResult)compareFirstName:(Person *)otherObject; 

@end 

입니까? 문제는 당장, 당연히 나는 하나 이상의 집 이메일과 다른 분야를 가질 수 없다. 내가 주소록 API에서 이메일과 전화 번호를 검색하는거야 방법

다음

은 다음과 같습니다

내가 Parse User Database To Store Device Contacts To

편집을 저장하고있어, 을 좀 더 통찰력을 제공 할 수 있습니다. 구조의 두 가지 방법이있다

//email 
ABMultiValueRef emails = ABRecordCopyValue(contactPerson, 
              kABPersonEmailProperty); 
NSUInteger j = 0; 
for (j = 0; j < ABMultiValueGetCount(emails); j++){ 
    NSString *email = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emails, j); 
    if (j == 0){ 
     if(email){ 
      person.homeEmail = email; 
     } 
    } 
    else if (j==1){ 
     if(email){ 
      person.workEmail = email; 
     } 
    } 
} 

ABMultiValueRef numbers = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty); 

for (CFIndex i = 0; i < ABMultiValueGetCount(numbers); i++) { 
    NSString *phoneLabel = (__bridge NSString *)ABMultiValueCopyLabelAtIndex(numbers, i); 
    NSString *phoneNumber = (__bridge NSString *)ABMultiValueCopyValueAtIndex(numbers, i); 
    //NSLog(@"%@ | %@",phoneLabel,phoneNumber); 
    if([phoneLabel isEqualToString:@"Home Phone"]) 
    { 
     person.homePhone = phoneNumber; 
    }else if([phoneLabel isEqualToString:@"Work Phone"]) 
    { 
     person.workPhone = phoneNumber; 
    }else if([phoneLabel isEqualToString:@"Cell Phone"]) 
    { 
     person.cellPhone = phoneNumber; 
    } 

} 
+0

이것은 실제로 질문에 대한 답변이 아니지만 도움이 될 수 있습니다. 주소록을위한 Objective-C wrapper. https://github.com/erica/ABContactHelper – Kevin

답변

1

같습니다 NSArrayNSDictionary의 항목 - 각 사전은 addresstype (home있을 것입니다 email 속성이 당신의 Person 클래스를 수정

  1. 는, work 등). 유사한 접근법이 phone에 대해 취해질 수 있습니다.

  2. homeEmail, workEmail, homePhoneworkPhoneNSArray 종류 있도록 Person 클래스를 수정하고 각각의 이메일 주소와 전화 번호를 나타내는 문자열 배열을 보유하고 있습니다.

두 가지 옵션 모두 데이터베이스에 두 개의 추가 테이블이 필요합니다. 하나는 이메일 주소 용이고 다른 하나는 전화 번호 용입니다. 그들의 구조는 userid (users 표), type (집, 직장 등) 및 email address 또는 phone number 열로 구성됩니다.

+0

나는이 대답을 좋아해서 프로토 타이핑을 시작하고 싶다.전자 메일 주소 및 전화 번호 검색 방법이 귀하의 첫 번째 선택에 적합한 방법인지 여부에 대한 통찰력을 제공 할 수 있습니까? 나는 메인 포스트를 편집했다. – envinyater

+0

@envinyater 루프가 올바른 방법입니다, 예. 전자 메일 주소/전화 번호 유형도 추출하여 구문 분석해야합니다. 'ABMultiValueCopyLabelAtIndex'로 이것을 할 수 있습니다. 이 메소드는'CFStringRef'를 반환합니다.이 함수는 'NSString'에 캐스트하기 위해 무료 브리지를 사용할 수 있습니다. '_ $! ! $ _'. – neilco