前提・実現したいこと
現在、アプリ内からメーラーを立ち上げることのできるiOSアプリを作成していて、ユーザーが登録した情報を自動入力させる機能の実装を行なっています.
端末にメールアドレスの保存はできているのですが,宛先に自動入力させることができません.
データが正しく保存されていることの確認とLabelへの表示はできています.
ググってみると
どれもメールアドレスをプログラム内で入力してしまっているため解決方法がわかりません.
この方法ではうまくいったのですが,いざ登録した情報を呼び出そうとすると
発生している問題・エラーメッセージ
Cannot convert value of type 'String?' to expected argument type '[String]?'
というメッセージが出てしまいます.
該当のソースコード
Swift
1class ViewController: UIViewController, MFMailComposeViewControllerDelegate ,CLLocationManagerDelegate{ 2 @IBOutlet weak var sendMail: UILabel! 3 @IBOutlet weak var address: UILabel! 4 5 var testText:String = "default" 6 7 //②UserDefaults のインスタンス 8 let userDefaults = UserDefaults.standard 9 10 var locationManager: CLLocationManager! 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 setupLocationManager() 15 // デフォルト値 16 userDefaults.register(defaults: ["DataStore": "default"]) 17 address.text = readData() 18 } 19 20 21 @IBAction func sendMail(sender: Any) { 22 let toRecipients = address.text 23 if MFMailComposeViewController.canSendMail() { 24 let mail = MFMailComposeViewController() 25 mail.mailComposeDelegate = self 26 mail.setToRecipients(toRecipients) // 宛先アドレス 27 mail.setSubject("はじめまして") // 件名 28 mail.setMessageBody("こんにちは", isHTML: false) // 本文 29 present(mail, animated: true, completion: nil) 30 } else { 31 print("送信できません") 32 } 33 } 34 35@IBAction func sendMail2(sender: Any) { 36 let toRecipients2 = "xxx@co.jp" 37 if MFMailComposeViewController.canSendMail() { 38 let mail = MFMailComposeViewController() 39 mail.mailComposeDelegate = self 40 mail.setToRecipients([toRecipients2]) // 宛先アドレス 41 mail.setSubject("はじめまして"") // 件名 42 mail.setMessageBody("こんにちは", isHTML: false) // 本文 43 present(mail, animated: true, completion: nil) 44 } else { 45 print("送信できません") 46 } 47 } 48 49 func readData() -> String { 50 // Keyを指定して読み込み 51 let str: String = userDefaults.object(forKey: "DataStore") as! String 52 53 return str 54 } 55 func saveData(str: String){ 56 57 // Keyを指定して保存 58 userDefaults.set(str, forKey: "DataStore") 59 60 }
試したこと
Swift
1let toRecipients = address.text
を
Swift
1let toRecipients = "xxxxx@co.jp"
にした場合は正しく表示されます.
また,toRecipientsを使わず
Swift
1mail.setToRecipients("(textField.text ?? "なし")")
としてもうまくいきません.
コード全体が長いため全体は載せておりませんが,当方未熟のため大事なところをカットしてしまっているかもしれません.足りない部分がありましたら補足いたしますのでご指摘ください.
よろしくお願いします.
回答1件
あなたの回答
tips
プレビュー