无法使用IOS Swift 2.0中的ABAddressBook框架获取联系人姓名

时间:2015-12-18 07:59:20

标签: ios swift2 xcode7 abaddressbook contacts-framework

我正在使用新的框架Contacts来获取IOS 9中的联系人,并使用ABAddressBook框架从IOS 8.0获取联系人姓名,但在IOS 8.0应用程序中崩溃。我使用以下代码检查IOS版本

if #available(iOS 9.0, *)
{

    /*push to Contacts framework  */
}
else
{
    /*  push to ABAddressBook framework  */
}
在Swift 1.2中的

我使用此代码来获取联系人名称它工作正常

func processContactNames()
{
    var errorRef: Unmanaged<CFError>?
    var addressBook: ABAddressBookRef? =   extractABAddressBookRef(ABAddressBookCreateWithOptions(nil, &errorRef))
    var contactList: NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue()
    contactLists = []
    contactEmails = []
    contactEmailDetails = []


    for record:ABRecordRef in contactList 
    {
        var contactDetails: NSDictionary! = processAddressbookRecord(record)
        var emailAddresses: Array<String>! = contactDetails.valueForKey("emails") as! Array

        if emailAddresses.count > 0
        {
            for email in emailAddresses
            {
                var emailDetails: NSDictionary! = ["email":email, "contactIndex":contactEmailDetails.count,  "contactName":contactDetails.valueForKey("contactName") as! String, "photo":contactDetails.valueForKey("photo") as! UIImage]

                contactEmailDetails.append(emailDetails)
                contactEmails.append(email)
            }
        }  
    }
}

在Swift 2.0中我正在使用这个函数。现在它在xcode 7中运行不正常。

func processAddressbookRecord(addressBookRecord: ABRecordRef)->NSDictionary
{
    if var contactName: String =   ABRecordCopyCompositeName(addressBookRecord)?.takeRetainedValue() as? String
    {
        var contactName: String = ""

        contactName = ABRecordCopyCompositeName(addressBookRecord).takeRetainedValue() as! String

        let emailAddresses: Array<String>! = processEmail(addressBookRecord)
        let photo: UIImage! = processPhoto(addressBookRecord)
        let contactDetails: NSDictionary! = ["contactName":contactName,"emails":emailAddresses,"photo":photo]
        print(emailAddresses.count)

        return contactDetails

    }
}

0 个答案:

没有答案