快速从地址簿框架返回空值

Posted

技术标签:

【中文标题】快速从地址簿框架返回空值【英文标题】:Null value returns from AddressBook framework in swift 【发布时间】:2015-10-06 07:11:13 【问题描述】:

在我的 swift 应用程序中,我正在从 AddressBook 框架中检索 AddressBook 联系人。联系人检索成功,但以下情况除外。

案例 1:

如果我将没有联系人姓名的联系人号码单独保存到地址簿,则联系人添加成功。

但是,如果我尝试检索没有姓名的联系人,应用程序会崩溃,说 收到致命错误。

编码:

var contactName: String = ABRecordCopyCompositeName(addressBookRecord).takeRetainedValue() as NSString as String

我不知道如何处理这个空值异常。请指导我,如何解决这个问题。

【问题讨论】:

你为什么不检查contactName是否返回null,如果是的话,给它一个空字符串?像这样paste.ubuntu.com/12695416 你应该看看新的联系人框架developer.apple.com/library/prerelease/mac/documentation/… 应用程序在该行 @NSNoob 崩溃。那我该怎么做呢? 应用程序在您提供的行或支票上崩溃? 是的!应用程序在上述行崩溃。 【参考方案1】:

如果您有任何没有姓名的联系人,此代码不会崩溃:

func processAddressbookRecord(addressBookRecord: ABRecordRef) 

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

    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 let number:String = ABMultiValueCopyValueAtIndex(numbers,0)?.takeRetainedValue() as? String 
                print("number = \(number)");
                arrayOfContacts.addObject(["\(name)":"\(number)"]);
            
        
    

原帖:App crashing while fetching contact numbers from iPhone in SWIFT

【讨论】:

以上是关于快速从地址簿框架返回空值的主要内容,如果未能解决你的问题,请参考以下文章

实体框架组和处理空值

HttpResponse返回的值为空

JVS开源框架系列:​​快速搭建应用中心​「含软开企服的开源地址」

力软快速开发框架6.3最新版下载地址

JVS开源框架系列:JVS轻应用可以做什么?「含开源地址」

使用 fastjson 解决字段串对象空值返回空数组问题