>

번호를 키로 사용하여 내 앱을 통해 iPhone 주소록에서 검색 한 다음 해당 연락처와 관련된 이미지를 검색하여 UIImageView에 표시하고 싶습니다.

ABAddressBook 프레임 워크를 사용해 보았지만 진행할 단서가 없었습니다.

누구든지 나에게 따를 수있는 해결책이나 다른 대안을 제안 해 주시겠습니까? 모든 코드 스 니펫도 큰 도움이 될 것입니다 !!

어떤 형태의 도움이라도 대단히 감사하겠습니다.

미리 감사합니다

  • 답변 # 1

    AB 프레임 워크는 때때로 큰 고통이 될 수 있습니다. 그러나 일련의 매우 간단한 작업으로 분류됩니다. 먼저 ABAddressBook 인스턴스를 만들어야합니다 :

    ABAddressBookRef addressbook = ABAddressBookCreate();
    
    

    그런 다음 주소록에있는 모든 사람의 사본을 만들고 원하는 데이터를 찾기 위해 단계별로 진행하십시오 :

    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressbook);
    CFIndex numPeople = ABAddressBookGetPersonCount(addressbook);
    for (int i=0; i < numPeople; i++) {
    
    

    루프 안에서 개인에 대한 참조를 얻고 싶을 것입니다 :

    ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
    
    

    그런 다음 가지고있는 번호를 비교하고 싶습니다 ( inNumber )를 특정 사람과 관련된 모든 전화 번호로 그러려면 먼저 모든 사람의 전화 번호 목록이 필요합니다 :

    ABMutableMultiValueRef phonelist = ABRecordCopyValue(person, kABPersonPhoneProperty);
    
    

    물론, 각 개인의 전화 번호를 반복하는 내부 루프가 있어야합니다.

    CFIndex numPhones = ABMultiValueGetCount(phones);
    for (int j=0; j < numPhones; j++) {
    
    

    전화 번호에는 전화 번호와 번호가 모두 붙어 있으므로 실제 전화 번호 문자열을 NSString으로 추출해야합니다.

    CFTypeRef ABphone = ABMultiValueCopyValueAtIndex(phoneList, j);
    NSString *personPhone = (NSString *)ABphone;
    CFRelease(ABphone);
    
    

    이제 마지막으로 숫자를 비교할 수 있습니다! 표준 NSString 비교 방법을 사용하면되지만 형식 지정 등에 대해 걱정해야합니다.

    전화 번호가 inNumber 인 사람을 찾으면 , 당신은 그 사람의 이미지를 UIImage 로 추출하기를 원할 것입니다 :

       CFDataRef imageData = ABPersonCopyImageData(person);
        UIImage *image = [UIImage imageWithData:(NSData *)imageData];
        CFRelease(imageData);
    
    

    종료 할 때가되면 메모리를 정리해야합니다. AB 프레임 워크의 일반적인 경험 법칙은 Get  함수 이름에서 해제 할 필요가 없으며 Copy 가있는 항목  또는 Create 릴리스해야합니다. 따라서이 경우 CFRelease() 해야합니다.  와이즈 비즈 phonelistallPeople 그러나 addressbook 는 아닙니다 numPeople 또는 person .

  • 답변 # 2

    numPhones
    
    

    -(void)fetchAddressBook:(NSString *)searchnumber { ABAddressBookRef UsersAddressBook = ABAddressBookCreateWithOptions(NULL, NULL); //contains details for all the contacts CFArrayRef ContactInfoArray = ABAddressBookCopyArrayOfAllPeople(UsersAddressBook); //get the total number of count of the users contact CFIndex numberofPeople = CFArrayGetCount(ContactInfoArray); //iterate through each record and add the value in the array for (int i =0; i<numberofPeople; i++) { ABRecordRef ref = CFArrayGetValueAtIndex(ContactInfoArray, i); NSString *firstName = (__bridge NSString *)ABRecordCopyValue(ref, kABPersonFirstNameProperty); //Get phone no. from contacts ABMultiValueRef multi = ABRecordCopyValue(ref, kABPersonPhoneProperty); UIImage *iimage; NSString* phone; for (CFIndex j=0; j < ABMultiValueGetCount(multi); j++) { iimage=nil; phone=nil; phone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(multi, j); //if number matches if([phone isEqualToString:searchnumber]) { NSLog(@"equlas%@",searchnumber); //if person has image store it if (ABPersonHasImageData(ref)) { CFDataRef imageData=ABPersonCopyImageDataWithFormat(ref, kABPersonImageFormatThumbnail); iimage = [UIImage imageWithData:(__bridge NSData *)imageData]; }else{ //default image iimage=[UIImage imageNamed:@"icon"]; } //set image and name userimage.image=iimage; lblname.text=firstName; return; } } } }

관련 자료

  • 이전 zsh 프롬프트에서 지속적으로 업데이트되는 시계?
  • 다음 rails는 activerecord - : recordnotfound를 받고 있습니다