

Swift 4 でアプリを作成しています。

①ViewControllerに「取得」ボタンを置き、このボタンを押すとiPhoneの連絡先一覧が開きます。  
②一覧から任意の人(複数人)を選んでチェックし「Done」を押すとアラートが開き、選択した人が表示されます。  
③そこからさらに人をタップすると、その人の名前、携帯番号、メールアドレスを表示されます。  
④③のアラートの「OK」を押すとViewControllerに戻る。  
⑤再度、ViewControllerの「取得」ボタンを押してiPhoneの連絡先一覧を開くと チェックが外れていません。

「④」の段階で「②」でチェックされたCNContactPickerViewControllerをUncheckしたいです。もしくは、ここでアプリを初期化したらチェックが消えるのではと思っていますが分かりません。

[code]

    //  ViewController.swift
    //  ToAdressBook
    //  Created by admin on 2017/11/13.
    //  Copyright © 2017年 css. All rights reserved.
    
    import UIKit
    import Contacts
    import ContactsUI
    
    class ViewController: UIViewController, CNContactPickerDelegate, CNContactViewControllerDelegate {
    
        var target: [(name:String,email:String,phNo:String)] = []
        var nameList:[String] = []
        var cnPicker = CNContactPickerViewController()
    
        func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
            print("ContactPickerキャンセルしたよ")
        }
        //アプリを初期化？？？
        func applicationWillEnterForeground(application:UIApplication){
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            storyboard.instantiateViewController(withIdentifier: "MainViewController")
        }
    
        //選んた人をアラートで表示
        func displayNameList(mycount:Int){
            self.cnPicker.dismiss(animated: false) {
                print("閉じたよ?")
            }
            let alert = UIAlertController(
                title:"選択した人",
                message: "",
                preferredStyle: .alert)
            //アラートにアクション追加(アクション名は選択した人達)
            for i in 0..<mycount {
                alert.addAction(
                    UIAlertAction(
                        title: "\(nameList[i])",
                        style: .default,
                        handler: {(action) -> Void in
                            //各アクション(各人の情報をタプル配列から取りアラートで表示)
                            let kekkaAlert = UIAlertController(
                                title: self.target[i].name,
                                message: "\(self.target[i].email)" + "\n" +  "\(self.target[i].phNo)",
                                preferredStyle:.alert)
                            kekkaAlert.addAction(UIAlertAction(
                                title: "OK",
                                style: .default,
                                handler: {(action) -> Void in
                                    //チェックを消す処理またはアプリを初期化したい
    　　　　　　　　　　　　　　　　　 //ここで処理？
                                    //targetを初期化
                                    self.target = []                        
                            }))
                            self.present(kekkaAlert, animated: true, completion: nil)
                            print("target name = \(self.target[i].name)")
                            print("target email = \(self.target[i].email)")
                            print("target phoneNumber = \(self.target[i].phNo)")
                    })
                )
            }
            //アラートに「キャンセル」追加
            alert.addAction(
                UIAlertAction(
                    title: "Cancel",
                    style: .cancel,
                    handler: nil)
            )
            //アラート表示
            self.present(
                alert,
                animated: true,
                completion: {
                    //print("アラート表示したよ")
                }
            )
        }
        //「Done」ボタン押下で選択
        func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]){
            contacts.forEach { contact in
                let names = contact.givenName + " " + contact.familyName
                let emails = (contact.emailAddresses[0].value as! String)
                let phoneNo = (contact.phoneNumbers[0].value as! CNPhoneNumber).value(forKey: "digits") as! String
                print("email is = \(emails)")
                print("phoneNo is = \(phoneNo)")
                nameList.append(names)
                //タプルの配列"target"に入れる
                target.append((name:names,email:emails,phNo:phoneNo))
                print("\(target)")
            }
            let count = nameList.count
            print("nameList = \(nameList)")
            displayNameList(mycount:count)
    
        }
        //「一覧」ボタンを押下。連絡先を取得
        @IBAction func getMyContact(_ sender: Any) {
            nameList =  []
            //連絡先を選択するためにCNContactPickerViewControllerを表示する
            //これを実行すると初回時に「アプリが連絡先へのアクセスを求めています」というダイアログが表示され、
            //連絡先へのアクセス許可が求められる。許可するとiPhoneに登録されている連絡先リストが表示される。
            //let cnPicker = CNContactPickerViewController()
            cnPicker.delegate = self
            self.present(cnPicker, animated: true, completion: nil)
    
    
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        @objc func commitButtonTapped(){
            self.view.endEditing(true)
        }
    
    }
    
[/code]

**画面1**  
![画面1](https://i.stack.imgur.com/hzm6G.png)  
**画面2**  
![画面2](https://i.stack.imgur.com/YhtdH.png)  
**画面3**  
![画面3](https://i.stack.imgur.com/vYZ3e.png)  
**画面4**  
![画面4](https://i.stack.imgur.com/2KfAi.png)  
**画面5**  
![画面5](https://i.stack.imgur.com/Ax7Ve.png)


CC BY-SA 3.0
2017-12-05T04:51:34.453
40046
2020-11-12T23:04:00.343
2017-12-11T13:52:43.557
19110
26505
question
swift ios
自分のアプリの初期化または、CNContactPickerViewControllerのチェックの外し方


@IBAction func getMyContact(_ sender: Any) ｛｝で毎回let cnPicker =
CNContactPickerViewController()することで解決できました。ありがとうございました。


CC BY-SA 3.0
2017-12-18T06:08:08.807
40356
2017-12-18T06:08:08.807
26505
40046
answer