手机联系人相关AddressBookUI.Framwork和AddressBook.Framework

AddressBook.Framework应用之ABAddressBookRef,ABRecordRef,ABMutableMultiValueRef,ABMultiValueRef

AddressBook.framework是c  api直接访问操作 通讯录数据库框架,AddressBookUI.framework是oc 界面交互框架;

以下代码是操作通讯录,纯c框架没有*指针定义,没有界面交互,只需导入AddressBook.framework框架

 ABAddressBookRef adbk=ABAddressBookCreate();//获取本地通讯录数据库

    ABRecordRef moi=NULL;//联系人

   ABRecordRef annkey=ABPersonCreate();//创建联系人

    //设置联系人的值

    ABRecordSetValue(annkey,kABPersonFirstNameProperty,@"annkey",NULL);

    ABRecordSetValue(annkey,kABPersonLastNameProperty,@"hu",NULL);

     //创建多值属性

    ABMutableMultiValueRef addr=ABMultiValueCreateMutable(kABStringPropertyType);

     //增加属性名和属性值,属性名为kABHomeLabel

    ABMultiValueAddValueAndLabel(addr,@"annkey@qq.con",kABHomeLabel,NULL);

     //设置联系人的多值邮箱属性

   ABRecordSetValue(annkey,kABPersonEmailProperty, addr,NULL);

    

   ABAddressBookAddRecord(adbk, annkey,NULL);//增加联系人

    ABAddressBookSave(adbk,NULL);//保存联系人

    

   CFRelease(addr);

    CFRelease(annkey);//,即使是在arc机制里,c对象仍需手动释放

    

    CFArrayRef sams=ABAddressBookCopyPeopleWithName(adbk, (CFStringRef)@"hu");//联系人数组,可能存在多个同名的联系人,需要通过其他属性来判断具体是哪个

   for (CFIndex ix=0; ix<CFArrayGetCount(sams); ix++) {

        

             // 从联系人数组多个sam中读取

       ABRecordRef sam=CFArrayGetValueAtIndex(sams, ix);

            //  获取联系人的名属性

        CFStringRef last=ABRecordCopyValue(sam,kABPersonLastNameProperty);

       NSLog(@" is find %@",last);

        //找到符合条件的联系人

       if (last&&CFStringCompare(last, (CFStringRef)@"annkey",0)==0) {

            moi=sam;

                   }

       if (last) {

           //必须要判断cf对象是否为空,只有不是null才可被释放,如果不判断会报错。

           CFRelease(last); //c对象需手动释放

        }

        

    }

   if (NULL==moi) {

       //此处通讯录肯定不为空,数据库是存在的

       CFRelease(sams);

       CFRelease(adbk);//c对象需手动释放

       return;

    }

    //获取联系人的邮件属性,初始化为多值

    ABMultiValueRef emails=ABRecordCopyValue(moi,kABPersonEmailProperty);

   if (NULL==emails) {

        NSLog(@"emails is null");

    }

   for (CFIndex ix=0; ix<ABMultiValueGetCount(emails); ix++) {

        //联系人的属性名和属性值

       CFStringRef labe1=ABMultiValueCopyLabelAtIndex(emails, ix);

       CFStringRef value=ABMultiValueCopyValueAtIndex(emails, ix);

        NSLog(@"i have a %@ address I%@",labe1,value);

       CFRelease(labe1);

       CFRelease(value);

    }

    NSLog(@"emails is null2");

   CFRelease(emails);

   CFRelease(sams);

   CFRelease(adbk);


AddressBookUI.Framwork应用之ABPeoplePickerNavigationController

 必须设置委托ABPeoplePickerNavigationControllerDelegate,ab.peoplePickerDelegate=self;

委托方法:

-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier

{

    //点击联系人详情里面的属性,对相应的属性做处理

   ABMultiValueRef values=ABRecordCopyValue(person, property);

    CFIndex ix=ABMultiValueGetIndexForIdentifier(values, identifier);

    CFStringRef value=ABMultiValueCopyValueAtIndex(values, ix);

   NSLog(@"%@",value);

   CFRelease(values);

   CFRelease(values);

    //获取某个值的标识器

    CFIndex identifie=ABMultiValueGetIdentifierAtIndex(values, ix);

   NSLog(@"identifier=%ld",identifie);

    //限制用户可以看到的属性

    peoplePicker.displayedProperties=[NSArrayarrayWithObject:[NSNumbernumberWithInt:kABPersonEmailProperty]];

    returnNO;//默认操作为选择进入相应的应用程序,比如打电话就进入电话程序

}

AddressBookUI.Framwork应用之ABPersonViewController, ABUnknownPersonViewController,ABNewPersonViewController

设置委托 ABPersonViewControllerDelegate,personVc.personViewDelegate=self;

//显示和编辑一个联系人信息

    ABPersonViewController *personVc=[[ABPersonViewControlleralloc]init];

    //把联系人信息作为导航栏的根视图,才可以显示编辑按钮和完成按钮,返回按钮

    UINavigationController *nav=[[UINavigationControlleralloc]initWithRootViewController:personVc];

   ABRecordRef person=ABPersonCreate();

    //CFString=CFSTR("")类似NSString =@"";直接赋值

    ABRecordSetValue(person,kABPersonFirstNameProperty, CFSTR("jun"),NULL);

    ABRecordSetValue(person,kABPersonLastNameProperty, CFSTR("ye"),NULL);

    personVc.personViewDelegate=self;

    personVc.displayedPerson=person;

   CFRelease(person);

    personVc.allowsEditing=YES;


委托方法:

-(BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier

{

    return NO ;//不为默认操作

}


//添加新联系人到通讯录,一般用于通讯录外面的应用,比如说点击某个按钮,直接进入联系人编辑,然后添加到通讯录

ABUnknownPersonViewController *unknown=[[ABUnknownPersonViewControlleralloc]init];

    unknown.displayedPerson=person;

    unknown.allowsAddingToAddressBook=YES;//允许添加


 //委托方法

-(BOOL)unknownPersonViewController:(ABUnknownPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier

{

    return NO;

}


//新建联系人,允许用户填入一个新联系人的所有属性,一般是通讯录里面的新建

    ABNewPersonViewController *new=[[ABNewPersonViewControlleralloc]init];

    new.newPersonViewDelegate=self;

//委托方法

-(void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(ABRecordRef)person

{

    //用于编辑新联系人后做的事件,比如说模态退出,比如说不保存联系人到通讯录

   if (person!=NULL) {

        ABAddressBookRef adbk=ABAddressBookCreate();

        //从数据库中删除新加的联系人

       ABAddressBookRemoveRecord(adbk, person, NULL);

        CFStringRef name=ABRecordCopyCompositeName(person);

        NSLog(@"name%@",name);//对新加的联系人做处理,不一定要保存到通讯录数据库

       CFRelease(name);

       CFRelease(adbk);

        

    }

}




CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分类,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值