首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SWIFT中从iPhone中获取联系人号码时应用程序崩溃

在SWIFT中从iPhone中获取联系人号码时应用程序崩溃
EN

Stack Overflow用户
提问于 2015-09-06 09:56:01
回答 1查看 989关注 0票数 1

我试图使用以下代码获取联系人:

代码语言:javascript
复制
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...

它在仿真器上运行良好,但在设备上却不运行。也许这是由于一些零价值。该应用程序使用以下msg崩溃:fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-06 11:18:37

试一试,这样可以解决你的问题。

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32422244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档