Ios 致命错误:在展开可选值时意外发现nil,加载时崩溃电话联系人

Ios 致命错误:在展开可选值时意外发现nil,加载时崩溃电话联系人,ios,xcode,swift,addressbook,Ios,Xcode,Swift,Addressbook,致命错误:在展开可选值时意外发现nil Swift的函数签名专用化。(\u fatalErrorMessage(Swift.StaticString, Swift.StaticString,Swift.StaticString,Swift.UInt)->()(闭包) #(二) 我的代码是: addressBook.fieldsMask = APContactField.Default addressBook.sortDescriptors = [NSSortDescriptor(

致命错误:在展开可选值时意外发现nil

Swift的函数签名专用化。(\u fatalErrorMessage(Swift.StaticString, Swift.StaticString,Swift.StaticString,Swift.UInt)->()(闭包) #(二)

我的代码是:

addressBook.fieldsMask = APContactField.Default
        addressBook.sortDescriptors = [NSSortDescriptor(key: "name.firstName", ascending: true)]
        addressBook.filterBlock = {(contact: APContact!) -> Bool in
            print(contact.phones)

            return contact.phones!.count > 0
        }


        addressBook.loadContacts({ (contacts: [APContact]?, error: NSError?) in
            if (contacts != nil) {
                self.allContacts.removeAll(keepCapacity: false)
                self.tableView.tableHeaderView = self.resultSearchController.searchBar
                let newContacts = contacts as [APContact]!
                //Validate Phone Number

                newContacts.map({ (contact: APContact) -> Void in
                    if self.isValidNumberContact(contact) {
                        self.allContacts.append(contact)
                        print(self.allContacts)
                    }
                })
                self.callContactsWebservice(WithPhoneNumbers: self.allContacts)
                completion(contactsFound: true)
            } else {
                completion(contactsFound: false)
            }
        })
    case .Denied:
        showPermisisonDeniedAlert()
    default:
        print("", terminator: "")
    }

使用guard确保该值不为零:

addressBook.fieldsMask = APContactField.Default
    addressBook.sortDescriptors = [NSSortDescriptor(key: "name.firstName", ascending: true)]
    addressBook.filterBlock = {(contact: APContact!) -> Bool in
        print(contact.phones)
        guard let phones = contact.phones else {
         return
         }
        return phones.count > 0
    }


    addressBook.loadContacts({ (contacts: [APContact]?, error: NSError?) in
          guard let phones = contacts as? [APContact] else {
         completion(contactsFound: false)
         return
         }
            self.allContacts.removeAll(keepCapacity: false)
            self.tableView.tableHeaderView = self.resultSearchController.searchBar
            let newContacts = contacts as [APContact]!
            //Validate Phone Number

            newContacts.map({ (contact: APContact) -> Void in
                if self.isValidNumberContact(contact) {
                    self.allContacts.append(contact)
                    print(self.allContacts)
                }
            })
            self.callContactsWebservice(WithPhoneNumbers: self.allContacts)
            completion(contactsFound: true)
    })
case .Denied:
    showPermisisonDeniedAlert()
default:
    print("", terminator: "")
}
可能重复的