iOS开发中 C语言char型转换为 CFStringRef

在iOS开发中,遇到将SQLite中C语言char类型数据存入联系人列表时,由于ABAddressbook方法要求,需将其转换为CFStringRef。本文通过代码示例展示转换过程。

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

数据从SQLite中取出后直接存到联系人列表里出现了这个问题:

sqlite中C语言char类型字符,在ABAddressbook中的这个方法中无法识别,需要转换为CFStringRef类型

ABRecordSetValue(tmpRecord, kABPersonFirstNameProperty, tmpFirstName, &error);

转换方法:
CFStringRef tmpFirstName =CFStringCreateWithCString(NULL, firstName_c, kCFStringEncodingUTF8);

代码示例:

- (void)addContacts
{
    
    NSString *sqlQuery = [NSString stringWithFormat:@"SELECT * FROM %@",dbBackupContactsInfoTable];
    sqlite3_stmt * statement;

    if (sqlite3_prepare_v2(CDB, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW)
        {
            
            char *firstName_c = (char*)sqlite3_column_text(statement, 1);
            char *lastName_c = (char*)sqlite3_column_text(statement, 2);
            char *phoneNum_c =(char*)sqlite3_column_text(statement, 3);

            ABAddressBookRef tmpAddressBook = ABAddressBookCreate();
            ABRecordRef tmpRecord = ABPersonCreate();
            CFErrorRef error;
            BOOL tmpSuccess = NO;
           
            //First name
            CFStringRef tmpFirstName =CFStringCreateWithCString(NULL, firstName_c, kCFStringEncodingUTF8);
            tmpSuccess = ABRecordSetValue(tmpRecord, kABPersonFirstNameProperty, tmpFirstName, &error);
            CFRelease(tmpFirstName);
       
            //Last name
            CFStringRef tmpLastName = CFStringCreateWithCString(NULL, lastName_c, kCFStringEncodingUTF8);
            tmpSuccess = ABRecordSetValue(tmpRecord, kABPersonLastNameProperty, tmpLastName, &error);
            CFRelease(tmpLastName);

            //phone number
            CFTypeRef tmpPhones = CFStringCreateWithCString(NULL, phoneNum_c, kCFStringEncodingUTF8);;
            ABMutableMultiValueRef tmpMutableMultiPhones = ABMultiValueCreateMutable(kABPersonPhoneProperty);
            ABMultiValueAddValueAndLabel(tmpMutableMultiPhones, tmpPhones, kABPersonPhoneMobileLabel, NULL);
            tmpSuccess = ABRecordSetValue(tmpRecord, kABPersonPhoneProperty, tmpMutableMultiPhones, &error);
            CFRelease(tmpPhones);
            
            //保存记录
            tmpSuccess = ABAddressBookAddRecord(tmpAddressBook, tmpRecord, &error);
            CFRelease(tmpRecord);
            //保存数据库
            tmpSuccess = ABAddressBookSave(tmpAddressBook, &error);
            CFRelease(tmpAddressBook);

        }
    }
    sqlite3_close(CDB);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值