zoukankan      html  css  js  c++  java
  • Swift

    使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人。同时,还能对通讯录进行新增、修改、删除联系人操作。

    (注意:这些操作同查询一样,首先需要发起授权请求)

    1,添加新联系人
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    import UIKit
    import AddressBook
    import AddressBookUI
     
    class ViewController: UIViewController {
         
        //address Book对象,用来获取电话簿句柄
        var addressBook:ABAddressBookRef?
         
        override func viewDidLoad() {
            super.viewDidLoad()
             
            //定义一个错误标记对象,判断是否成功
            var error:Unmanaged<CFErrorRef>?
            addressBook = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
             
            //发出授权信息
            let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
            if (sysAddressBookStatus == ABAuthorizationStatus.NotDetermined) {
                println("requesting access...")
                var errorRef:Unmanaged<CFError>? = nil
                //addressBook = extractABAddressBookRef(ABAddressBookCreateWithOptions(nil, &errorRef))
                ABAddressBookRequestAccessWithCompletion(addressBook, { success, error in
                    if success {
                        //添加新联系人
                        self.addRecord();
                    }
                    else {
                        println("error")
                    }
                })
            }
            else if (sysAddressBookStatus == ABAuthorizationStatus.Denied ||
                sysAddressBookStatus == ABAuthorizationStatus.Restricted) {
                    println("access denied")
            }
            else if (sysAddressBookStatus == ABAuthorizationStatus.Authorized) {
                println("access granted")
                //添加新联系人
                self.addRecord();
            }
        }
         
        //添加新联系人
        func addRecord(){
            //定义一个错误标记对象,判断是否成功
            var error:Unmanaged<CFErrorRef>?
             
            //创建一个联系人对象
            var newContact:ABRecordRef! = ABPersonCreate().takeRetainedValue()
            var success:Bool = false
             
            //设置联系人对象昵称
            success = ABRecordSetValue(newContact, kABPersonNicknameProperty, "小李", &error)
            println("设置昵称结果:(success)")
             
            //设置联系人姓氏
            success = ABRecordSetValue(newContact, kABPersonLastNameProperty, "李", &error)
            println("设置姓氏结果:(success)")
             
            //设置联系人名字
            success = ABRecordSetValue(newContact, kABPersonFirstNameProperty, "大木", &error)
            println("设置名字结果:(success)")
             
            //设置联系人电话
            let phones:ABMutableMultiValueRef = ABMultiValueCreateMutable(
                ABPropertyType(kABStringPropertyType)).takeRetainedValue()
            success = ABMultiValueAddValueAndLabel(phones, "123456", "公司", nil)
            println("设置电话条目:(success)")
            success = ABRecordSetValue(newContact, kABPersonPhoneProperty, phones, nil)
            println("设置电话结果:(success)")
             
            //设置联系人邮箱
            let addr:ABMutableMultiValueRef = ABMultiValueCreateMutable(
                ABPropertyType(kABStringPropertyType)).takeRetainedValue()
            success = ABMultiValueAddValueAndLabel(addr, "ABG@hangge.com", "公司", nil)
            println("设置邮箱条目结果:(success)")
            success = ABRecordSetValue(newContact, kABPersonEmailProperty, addr, nil)
            println("设置邮箱结果:(success)")
             
            //保存联系人
            success = ABAddressBookAddRecord(addressBook, newContact, &error)
            println("保存记录是否成功:(success)")
             
            //修改数据库
            success = ABAddressBookSave(addressBook, &error)
            println("修改数据库是否成功:(success)")
        }
     
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    2,编辑修改联系人

    先获取所有联系人遍历,根据联系人姓名或者电话来判断是否修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    import UIKit
    import AddressBook
    import AddressBookUI
     
    class ViewController: UIViewController {
         
        //address Book对象,用来获取电话簿句柄
        var addressBook:ABAddressBookRef?
         
        override func viewDidLoad() {
            super.viewDidLoad()
             
            //定义一个错误标记对象,判断是否成功
            var error:Unmanaged<CFErrorRef>?
            addressBook = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
             
            //发出授权信息
            let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
            if (sysAddressBookStatus == ABAuthorizationStatus.NotDetermined) {
                println("requesting access...")
                var errorRef:Unmanaged<CFError>? = nil
                //addressBook = extractABAddressBookRef(ABAddressBookCreateWithOptions(nil, &errorRef))
                ABAddressBookRequestAccessWithCompletion(addressBook, { success, error in
                    if success {
                        //编辑联系人
                        self.editRecord();
                    }
                    else {
                        println("error")
                    }
                })
            }
            else if (sysAddressBookStatus == ABAuthorizationStatus.Denied ||
                sysAddressBookStatus == ABAuthorizationStatus.Restricted) {
                    println("access denied")
            }
            else if (sysAddressBookStatus == ABAuthorizationStatus.Authorized) {
                println("access granted")
                //编辑联系人
                self.editRecord();
            }
        }
         
        //编辑联系人
        func editRecord(){
            //定义一个错误标记对象,判断是否成功
            var error:Unmanaged<CFErrorRef>?
            var sysContacts:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook)
                .takeRetainedValue() as NSArray
             
            //遍历通讯录
            for contact in sysContacts {
                //获取姓名
                var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("姓:(lastName)")
                var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("名:(firstName)")
                 
                var success:Bool = false
                if lastName == "李" && firstName == "大木"{
                    //设置联系人新对象昵称
                    success = ABRecordSetValue(contact, kABPersonNicknameProperty, "小李子", &error)
                    println("设置昵称结果:(success)")
                }
            }
             
            //保存数据库
            var success = ABAddressBookSave(addressBook, &error)
            println("修改数据库是否成功:(success)")
        }
         
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    3,删除联系人

    先获取所有联系人遍历,根据联系人姓名或者电话来判断是否删除

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    import UIKit
    import AddressBook
    import AddressBookUI
     
    class ViewController: UIViewController {
         
        //address Book对象,用来获取电话簿句柄
        var addressBook:ABAddressBookRef?
         
        override func viewDidLoad() {
            super.viewDidLoad()
             
            //定义一个错误标记对象,判断是否成功
            var error:Unmanaged<CFErrorRef>?
            addressBook = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
             
            //发出授权信息
            let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
            if (sysAddressBookStatus == ABAuthorizationStatus.NotDetermined) {
                println("requesting access...")
                var errorRef:Unmanaged<CFError>? = nil
                //addressBook = extractABAddressBookRef(ABAddressBookCreateWithOptions(nil, &errorRef))
                ABAddressBookRequestAccessWithCompletion(addressBook, { success, error in
                    if success {
                        //删除联系人
                        self.deleteRecord();
                    }
                    else {
                        println("error")
                    }
                })
            }
            else if (sysAddressBookStatus == ABAuthorizationStatus.Denied ||
                sysAddressBookStatus == ABAuthorizationStatus.Restricted) {
                    println("access denied")
            }
            else if (sysAddressBookStatus == ABAuthorizationStatus.Authorized) {
                println("access granted")
                //删除联系人
                self.deleteRecord();
            }
        }
         
        //删除联系人
        func deleteRecord(){
            //定义一个错误标记对象,判断是否成功
            var error:Unmanaged<CFErrorRef>?
            var sysContacts:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook)
                .takeRetainedValue() as NSArray
             
            //遍历通讯录
            for contact in sysContacts {
                //获取姓名
                var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?
                    .takeRetainedValue() as! String? ?? ""
                var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?
                    .takeRetainedValue() as! String? ?? ""
                 
                var success:Bool = false
                if lastName == "李" && firstName == "大木"{
                    success = ABAddressBookRemoveRecord(addressBook, contact, nil)
                    println("删除结果:(success)")
                }
            }
             
            //保存数据库
            var success = ABAddressBookSave(addressBook, &error)
            println("修改数据库是否成功:(success)")
        }
         
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
  • 相关阅读:
    thinkphp5 tp5 命名空间 报错 Namespace declaration statement has to be the very first statement in the script
    开启 php 错误 提示 php-fpm 重启 nginx 500错误 解决办法 wdlinux lnmp 一键包 php脚本无法解析执行
    js 设置 cookie 定时 弹出层 提示层 下次访问 不再显示 弹窗 getCookie setCookie setTimeout
    php 二维数组 转字符串 implode 方便 mysql in 查询
    nginx 重启 ps -ef|grep nginx kill -HUP 主进程号
    jquery bootstrap help-block input 表单 提示 帮助 信息
    jquery 倒计时 60秒 短信 验证码 js ajax 获取
    jQuery如何获取同一个类标签的所有的值 遍历
    linux下C语言文件操作相关函数
    gcc,gdb用法
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4843599.html
Copyright © 2011-2022 走看看