2013-01-07 83 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; 

} 

我接觸ID用約200個聯繫人的地址簿測試了這種方法,並且這個功能非常緩慢。存在任何自動執行此操作的ABAddressbook.h方法?

在此先感謝。

回答

2

ABAddressBook在iOS上提供的搜索功能少於Mac OS上的等效API。不幸的是,過濾聯繫人需要線性掃描,例如上面顯示的那個。 Apple's documentation包含使用基於塊的謂詞的稍微不同的方法,但它基本上等同於您在此處執行的操作。

一個可能的加速將是避免構建所有ContattoRubrica對象,直到執行搜索並找到(或未找到)匹配的ABPerson記錄爲止。無論如何,您應該使用工具來確定您的代碼大部分時間花在哪裏。

+2

同意。還有一件事需要考慮的是,電話號碼是以各種不同的方式格式化的,所以你應該根據你的用例去掉標點符號和可能的國家代碼。 –

+0

好的。非常感謝。 – pasqui86