2013-01-07 4 views
2

같은 제목 전화 번호로 장치 주소록에서 연락처를 찾는 가장 효과적이고 효과적인 방법은 무엇입니까?objective c 전화 번호로 주소록에서 연락처 찾기

참고 : 사실 나는이 같은 방법을 사용
[rm getElencoContatti] 반환 주소록의 모든 연락처를
[contatto getID] 반환 주소록
[contatto getNumeriContatto] 반환 주소록의 모든 연락처의 전화 번호

+(NSMutableDictionary *)getNomeContattoDaNumero:(NSString *)numeroTelefono { 

    NSMutableDictionary *returnValue = [[NSMutableDictionary alloc]init]; 
    NSNumber *idContact; 

    for(ContattoRubrica *contatto in [rm getElencoContatti]) { 
     idContact = [contatto getID]; 
     for(id numero in [contatto getNumeriContatto]) { 

      if([numeroTelefono isEqualToString:[numero objectForKey:@"numeroTelefono"]]) { 

       [returnValue setValue:[contatto getNomeContatto] forKey:@"nome"]; 
       [returnValue setValue:idContact forKey:@"idContatto"]; 

       return returnValue; 
      } 
     } 
    } 

    [returnValue setValue:numeroTelefono forKey:@"nome"]; 
    [returnValue setValue:[NSNumber numberWithInt:-1] forKey:@"idContatto"]; 

    return returnValue; 

} 

I에서 연락처 아이디 이 방법을 약 200 개의 주소록으로 테스트했는데이 기능은 매우 느리다. 이 작업을 자동으로 수행하는 ABAddressbook.h 메소드가 있습니까?

미리 감사드립니다.

답변

2

ABAddressBook (iOS)은 Mac OS의 동일한 API보다 검색 기능이 적습니다. 안타깝게도 연락처를 필터링하려면 위에 표시된 것과 같은 선형 스캔이 필요합니다. Apple's documentation에는 블록 기반 술어를 사용하는 약간 다른 접근법이 포함되어 있지만 근본적으로 여기에서하는 것과 동일합니다.

검색을 수행하고 일치하는 ABPerson 레코드를 찾거나 찾을 때까지 사용자의 ContattoRubrica 개체가 모두 생성되는 것을 피할 수 있습니다. 어쨌든 인스 트루먼 트를 사용하여 코드가 대부분의 시간을 보내는 곳을 결정해야합니다.

+2

동의. 고려해야 할 한 가지 다른 점은 전화 번호가 여러 가지 방식으로 서식이 지정되므로 유스 케이스에 따라 구두점과 국가 코드를 삭제해야한다는 것입니다. –

+0

확인. 정말 고마워. – pasqui86

관련 문제