目的通过电话号码在地址簿中查找联系人



like title通过电话号码在设备地址簿中查找联系人的最佳和有效方法是什么?实际上我使用的方法是这样的:

注意:
[rm getElencoContatti]返回地址簿中的所有联系人
[contatto getID]从地址簿返回联系人id
[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;
}

我用大约200个联系人的地址簿测试了这个方法,这个功能非常慢。是否存在任何ABAddressbook.h方法可以自动执行此操作?

iOS上的ABAddressBook提供的搜索工具比Mac OS上的等效API少。不幸的是,过滤联系人需要线性扫描,就像你上面展示的那样。苹果的文档包含了一种稍微不同的方法,使用基于块的谓词,但它基本上等同于你在这里所做的。

一个可能的加速是避免构造所有ContattoRubrica对象,直到您执行搜索并找到(或未找到)匹配的ABPerson记录之后。在任何情况下,您都应该使用Instruments来确定代码在哪里花费了大部分时间。

最新更新