IOS/Swift 通讯录步骤
来源:互联网 发布:jisucopy是什么软件 编辑:程序博客网 时间:2024/06/15 12:16
通讯录的访问步骤一般如下:
调用ABAddressBookCreateWithOptions()方法创建通讯录对象ABAddressBookRef。
调用ABAddressBookRequestAccessWithCompletion()方法获得用户授权访问通讯录。
调用ABAddressBookCopyArrayOfAllPeople()、ABAddressBookCopyPeopleWithName()方法查询联系人信息。
读取联系人后如果要显示联系人信息则可以调用ABRecord相关方法读取相应的数据;如果要进行修改联系人信息,则可以使用对应的方法修改ABRecord信息,然后调用ABAddressBookSave()方法提交修改;如果要删除联系人,则可以调用ABAddressBookRemoveRecord()方法删除,然后调用ABAddressBookSave()提交修改操作。
也就是说如果要修改或者删除都需要首先查询对应的联系人,然后修改或删除后提交更改。如果用户要增加一个联系人则不用进行查询,直接调用ABPersonCreate()方法创建一个ABRecord然后设置具体的属性,调用ABAddressBookAddRecord方法添加即可。
class ViewController: UIViewController { //1.创建通讯录对象ABAddressBookRef。 let addressBook: ABAddressBook = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue() override func viewDidLoad() { super.viewDidLoad() //2.获得用户授权访问通讯录 ABAddressBookRequestAccessWithCompletion(addressBook){isAccess, error in if isAccess { //操作 self.getAddressBookInfos() } } } func getAddressBookInfos() { if ABAddressBookGetAuthorizationStatus() == .Authorized { //3.查询联系信息 var arr = ABAddressBookCopyArrayOfAllPeople(self.addressBook).takeRetainedValue() for record in arr as NSArray { //do something... } } }}
func getSysContacts() -> [[String:AnyObject]] { var error:Unmanaged<CFError>? var addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue() let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus() if sysAddressBookStatus == .Denied || sysAddressBookStatus == .NotDetermined { // Need to ask for authorization var authorizedSingal:dispatch_semaphore_t = dispatch_semaphore_create(0) var askAuthorization:ABAddressBookRequestAccessCompletionHandler = { success, error in if success { ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray dispatch_semaphore_signal(authorizedSingal) } } ABAddressBookRequestAccessWithCompletion(addressBook, askAuthorization) dispatch_semaphore_wait(authorizedSingal, DISPATCH_TIME_FOREVER) } func analyzeSysContacts(sysContacts:NSArray) -> [[String:AnyObject]] { var allContacts:Array = [[String:AnyObject]]() func analyzeContactProperty(contact:ABRecordRef, property:ABPropertyID) -> [AnyObject]? { var propertyValues:ABMultiValueRef? = ABRecordCopyValue(contact, property)?.takeRetainedValue() if propertyValues != nil { var values:Array<AnyObject> = Array() for i in 0 ..< ABMultiValueGetCount(propertyValues) { var value = ABMultiValueCopyValueAtIndex(propertyValues, i) switch property { // 地址 case kABPersonAddressProperty : var valueDictionary:Dictionary = [String:String]() var addrNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary valueDictionary["_Country"] = addrNSDict.valueForKey(kABPersonAddressCountryKey) as? String ?? "" valueDictionary["_State"] = addrNSDict.valueForKey(kABPersonAddressStateKey) as? String ?? "" valueDictionary["_City"] = addrNSDict.valueForKey(kABPersonAddressCityKey) as? String ?? "" valueDictionary["_Street"] = addrNSDict.valueForKey(kABPersonAddressStreetKey) as? String ?? "" valueDictionary["_Contrycode"] = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey) as? String ?? "" // 地址整理 var fullAddress:String = (valueDictionary["_Country"]! == "" ? valueDictionary["_Contrycode"]! : valueDictionary["_Country"]!) + ", " + valueDictionary["_State"]! + ", " + valueDictionary["_City"]! + ", " + valueDictionary["_Street"]! values.append(fullAddress) // SNS case kABPersonSocialProfileProperty : var valueDictionary:Dictionary = [String:String]() var snsNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary valueDictionary["_Username"] = snsNSDict.valueForKey(kABPersonSocialProfileUsernameKey) as? String ?? "" valueDictionary["_URL"] = snsNSDict.valueForKey(kABPersonSocialProfileURLKey) as? String ?? "" valueDictionary["_Serves"] = snsNSDict.valueForKey(kABPersonSocialProfileServiceKey) as? String ?? "" values.append(valueDictionary) // IM case kABPersonInstantMessageProperty : var valueDictionary:Dictionary = [String:String]() var imNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionary valueDictionary["_Serves"] = imNSDict.valueForKey(kABPersonInstantMessageServiceKey) as? String ?? "" valueDictionary["_Username"] = imNSDict.valueForKey(kABPersonInstantMessageUsernameKey) as? String ?? "" values.append(valueDictionary) // Date case kABPersonDateProperty : var date:String? = (value.takeRetainedValue() as? NSDate)?.description if date != nil { values.append(date!) } default : var val:String = value.takeRetainedValue() as? String ?? "" values.append(val) } } return values }else{ return nil } } for contact in sysContacts { var currentContact:Dictionary = [String:AnyObject]() /* 部分单值属性 */ // 姓、姓氏拼音 var FirstName:String = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as String? ?? "" currentContact["FirstName"] = FirstName currentContact["FirstNamePhonetic"] = ABRecordCopyValue(contact, kABPersonFirstNamePhoneticProperty)?.takeRetainedValue() as String? ?? "" // 名、名字拼音 var LastName:String = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as String? ?? "" currentContact["LastName"] = LastName currentContact["LirstNamePhonetic"] = ABRecordCopyValue(contact, kABPersonLastNamePhoneticProperty)?.takeRetainedValue() as String? ?? "" // 昵称 currentContact["Nikename"] = ABRecordCopyValue(contact, kABPersonNicknameProperty)?.takeRetainedValue() as String? ?? "" // 姓名整理 currentContact["fullName"] = LastName + FirstName // 公司(组织) currentContact["Organization"] = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?.takeRetainedValue() as String? ?? "" // 职位 currentContact["JobTitle"] = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?.takeRetainedValue() as String? ?? "" // 部门 currentContact["Department"] = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?.takeRetainedValue() as String? ?? "" // 备注 currentContact["Note"] = ABRecordCopyValue(contact, kABPersonNoteProperty)?.takeRetainedValue() as String? ?? "" // 生日(类型转换有问题,不可用) //currentContact["Brithday"] = ((ABRecordCopyValue(contact, kABPersonBirthdayProperty)?.takeRetainedValue()) as NSDate).description /* 部分多值属性 */ // 电话 var Phone:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonPhoneProperty) if Phone != nil { currentContact["Phone"] = Phone } // 地址 var Address:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonAddressProperty) if Address != nil { currentContact["Address"] = Address } // E-mail var Email:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonEmailProperty) if Email != nil { currentContact["Email"] = Email } // 纪念日 var Date:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonDateProperty) if Date != nil { currentContact["Date"] = Date } // URL var URL:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonURLProperty) if URL != nil{ currentContact["URL"] = URL } // SNS var SNS:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonSocialProfileProperty) if SNS != nil { currentContact["SNS"] = SNS } allContacts.append(currentContact) } return allContacts } return analyzeSysContacts( ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray )}
0 0
- IOS/Swift 通讯录步骤
- Swift iOS 9通讯录访问
- Swift - 读取通讯录信息
- iOS通讯录
- iOS通讯录
- 通讯录 ios
- iOS通讯录
- iOS通讯录
- swift获取手机通讯录列表
- IOS通讯录操作总结
- ios 通讯录 中文
- ios 监听通讯录更新
- ios 添加通讯录资料
- ios读取通讯录信息
- ios 操作通讯录联系人
- iOS 通讯录问题
- IOS之通讯录ABAddressBook
- iOS调用本地通讯录
- 嵌入式学习推荐大家读得书
- 一个关于1到100之间和与积的数学题
- 86.Xcode配置.pch文件
- 系统学习机器学习之线性判别式(二)
- Duilib介绍以及各个类的简介
- IOS/Swift 通讯录步骤
- switch 中的return break
- 【HDU】 1242 Rescue
- tableview或者ScrollView看不到边界以外的内容
- java学习—day_6
- Centos下:/usr/bin/ld: cannot find -lXext
- float类型在值传递过程中出现的问题
- 项目管理十大知识范围
- poj 1611 The Suspects(并查集)