1

I am using new framework Contacts for fetching contacts in IOS 9 and Also using ABAddressBook framework for fetching contact name form IOS 8.0 but in IOS 8.0 app getting crash. I am using the following code to check IOS version

if #available(iOS 9.0, *)
{

    /*push to Contacts framework  */
}
else
{
    /*  push to ABAddressBook framework  */
}

in Swift 1.2 I am using this code to fetch Contact name it is working fine

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)
            }
        }  
    }
}

and in Swift 2.0 I am using this function.now its not working fine in 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

    }
}
  • Good point: you shared your code. Bad point: "its not working" is not detailed enough. What happens? Do you have compile errors or warnings? Do you get any errors in the logs? Is there a crash? If so, where? – jcaron Dec 18 '15 at 14:02
  • there is no compile error or warning whenever i run the code in IOS 8.3 or lower version App crash with message "found nil while unwrapping an optional value " i don't know how to fetch contact name i have tried so many ways but didn't found any solution. the app was working fine in Swift 1.2 but in 2.0 it crash every time we are not able to fetch those contacts name who has some kind of corrupt record. – brihaspati techno Dec 19 '15 at 03:55

0 Answers0