-2

CNContacts から電話番号文字列を取得しようとしています。連絡先ピッカー ビュー コントローラーをプルアップし、ユーザーが複数の連絡先を選択すると、メッセージ作成ビュー コントローラーを作成します。メッセージ作成ビュー コントローラーの受信者として渡す文字列の配列を作成する必要があります。エラーは次の行から発生します...contactsPhoneNumber.append(phoneNumber)

func AddFriendTapped() {
    let contactPickerViewController = CNContactPickerViewController()
    contactPickerViewController.delegate = self
    presentViewController(contactPickerViewController, animated: true, completion: nil)
}


func contactPicker(picker: CNContactPickerViewController,didSelectContacts contacts: [CNContact]) {

    //check if phone can send texts, if so, continue
    if !MFMessageComposeViewController.canSendText(){

        let composeVC = MFMessageComposeViewController()
        composeVC.messageComposeDelegate = self

        //must get phone number strings from CNContact
        let phoneNumberKey = [CNContactPhoneNumbersKey]
        for contact in contacts {
            var phoneNumber = contact.dictionaryWithValuesForKeys(phoneNumberKey)
            contactsPhoneNumber.append(phoneNumber)
        }

        composeVC.recipients = contactsPhoneNumber
        composeVC.body = "Hi, test message"

        // Present the view controller modally.
        dismissViewControllerAnimated(true) {
            self.presentViewController(composeVC, animated: true, completion: nil)
        }

    }

}

func messageComposeViewController(controller: MFMessageComposeViewController,
                                  didFinishWithResult result: MessageComposeResult) {
    // Check the result or perform other tasks.

    // Dismiss the mail compose view controller.
    controller.dismissViewControllerAnimated(true, completion: nil)
}
4

1 に答える 1

2

連絡先は複数の電話番号を持つことができるため、contact.phoneNumbers は CNlabeledValue の配列を返します。2 つのループが必要です。1 つはすべての連絡先を反復し、もう 1 つはすべての番号を反復します。次に、タイプ CNPhoneNumber の電話番号を抽出し、それを文字列に変換する必要があります。

コードにいくつかの変更を加えました。それが役に立てば幸い。:)

func contactPicker(picker: CNContactPickerViewController,didSelectContacts contacts: [CNContact]) {

    //check if phone can send texts, if so, continue
    if !MFMessageComposeViewController.canSendText(){

        let composeVC = MFMessageComposeViewController()
        composeVC.messageComposeDelegate = self

        //must get phone number strings from CNContact

        //let phoneNumberKey = [CNContactPhoneNumbersKey]


        for contact in contacts {
            let contactNumberArray = contact.phoneNumbers
            for contactNumber in contactNumberArray{
                let number = contactNumber.value as! CNPhoneNumber
                contactsPhoneNumber.append(number.stringValue)
            }
        }


        composeVC.recipients = contactsPhoneNumber
        composeVC.body = "Hi, test message"

        // Present the view controller modally.
        dismissViewControllerAnimated(true) {
            self.presentViewController(composeVC, animated: true, completion: nil)
        }

    }

}
于 2016-05-24T06:50:18.577 に答える