在SWIFT中从iPhone获取联系电话时,应用崩溃 [英] App crashing while fetching contact numbers from iPhone in SWIFT

查看:62
本文介绍了在SWIFT中从iPhone获取联系电话时,应用崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用以下代码获取联系人:

I am trying to get the contacts using the following code:

var addressBook: ABAddressBook!
let addressBookRef: ABAddressBook = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()

var arrContacts = [""]
var personNameContactNo:[String: String] = ["":""]
var arrOfDictContacts = NSMutableArray()
var Name: String!

    if let people = ABAddressBookCopyArrayOfAllPeople(addressBook)?.takeRetainedValue() as? NSArray {

        for person in people{
            if let name = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue() as? String {
                Name = name
            }
            let numbers:ABMultiValue = ABRecordCopyValue(
                person, kABPersonPhoneProperty).takeRetainedValue()
            var number = ABMultiValueCopyValueAtIndex(numbers,0).takeRetainedValue() as! String

            println("number = \(number)")

            if(number.isEmpty) {
                println("empty")
            } else {
                personNameContactNo.removeAll(keepCapacity: true)
                personNameContactNo.updateValue(number, forKey:Name)
                arrOfDictContacts.addObject(personNameContactNo)
            }
            println(personNameContactNo)
        }
        println(arrOfDictContacts)
    }

what am expecting is: ["Arun":"123455"], ["John":"23456122"], etc...

它在模拟器中运行良好,但在设备上却无法运行.也许是由于一些零值. 应用程序崩溃并显示以下消息:fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

It runs good in simulator but not on device. maybe it is due to some nil value. The app crashes with following msg: fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

推荐答案

尝试;这应该可以解决您的问题.

Try; this should solve your problem.

var addressBookRef: ABAddressBookRef = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()

var arrOfDictContacts:NSMutableArray = NSMutableArray()

let people:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBookRef).takeRetainedValue();

for person in people{
        if  let name:String = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as? String {
            let numbers:ABMultiValue = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue()

//                if (ABMultiValueGetCount(numbers) > 0) {  //This condition is optional because using '?' before calling takeRetainedValue
                if let number:String = ABMultiValueCopyValueAtIndex(numbers,0)?.takeRetainedValue() as? String {
                    println("number = \(number)");
                    arrOfDictContacts.addObject(["\(name)":"\(number)"]);
                }
//                }
        }
}
//--
println(arrOfDictContacts);

这篇关于在SWIFT中从iPhone获取联系电话时,应用崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆