iOS_获取通讯录

本文介绍了一种在iOS设备上获取用户通讯录的方法。通过Objective-C代码实现,包括读取联系人的姓名、电话号码、地址及电子邮件等信息,并将这些信息组织成易于使用的格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实获取通讯录的代码都是死得, 千篇一律,  并没有什么花儿, 网上一搜一大把, 我写出来的意义其实仅仅是记录一下

- (void) getAllContactsInfo {
    NSMutableArray *allContactsInfo = [[NSMutableArray alloc] initWithCapacity:1];
    
    // get all contacts info and upload them:
    CFErrorRef error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
    NSArray *allPeople = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));
    NSInteger numberOfPeople = [allPeople count];
    
    NSLog(@"%@",allPeople);
    for (NSInteger i = 0; i < numberOfPeople; i++) {
        NSMutableDictionary *contactInfo = [[NSMutableDictionary alloc] initWithCapacity:1];
        
        ABRecordRef person = (__bridge ABRecordRef)allPeople[i];
        
        NSString *firstName = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));
        NSString *lastName  = CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNameProperty));
        NSLog(@"Name:%@ %@", firstName, lastName);
        [contactInfo setObject:[NSString stringWithFormat:@"%@ %@", firstName, lastName] forKey:@"name"];
        
        NSMutableArray *allPhoneNumbers = [[NSMutableArray alloc] initWithCapacity:1];
        ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
        CFIndex numberOfPhoneNumbers = ABMultiValueGetCount(phoneNumbers);
        for (CFIndex i = 0; i < numberOfPhoneNumbers; i++) {
            NSString *phoneNumber = CFBridgingRelease(ABMultiValueCopyValueAtIndex(phoneNumbers, i));
            NSLog(@"  phone:%@", phoneNumber);
            [allPhoneNumbers addObject:phoneNumber];
        }
        [contactInfo setObject:allPhoneNumbers forKey:@"phone_numbers"];
        
        NSMutableArray *allAddresses = [[NSMutableArray alloc] init];
        ABMultiValueRef addresses = ABRecordCopyValue(person, kABPersonAddressProperty);
        CFIndex numberOfAddresses = ABMultiValueGetCount(addresses);
        for (CFIndex i = 0; i < numberOfAddresses; i ++) {
            NSString *address = CFBridgingRelease(ABMultiValueCopyValueAtIndex(addresses, i));
            NSLog(@"  address:%@", address);
            [allAddresses addObject:address];
        }
        [contactInfo setObject:allAddresses forKey:@"addresses"];
        
        NSMutableArray *allEmails = [[NSMutableArray alloc] initWithCapacity:1];
        ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
        CFIndex numberOfEmails = ABMultiValueGetCount(emails);
        for (CFIndex i = 0; i < numberOfEmails; i ++) {
            NSString *email = CFBridgingRelease(ABMultiValueCopyValueAtIndex(emails, i));
            NSLog(@"  email:%@", email);
            [allEmails addObject:email];
        }
        [contactInfo setObject:allEmails forKey:@"emails"];
        
        CFRelease(phoneNumbers);
        CFRelease(addresses);
        CFRelease(emails);
        
        NSLog(@"=============================================");
        
        [allContactsInfo addObject:contactInfo];
    }
    
    NSLog(@"All contacts: %@", allContactsInfo);
}

以上便是简单地获取通讯录, 并且格式也都写好有了


内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值