質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

エラー:which is already presenting (null)の対処法

Larry
Larry

総合スコア28

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0評価

0クリップ

5905閲覧

投稿2019/11/02 09:27

編集2019/11/02 09:35

発生している問題・エラーメッセージ

tableViewにsearchBarを設定してnavigationbarにaddボタンを設置しています。

検索状態でaddボタンを押して(このタイミングでエラー1)、その後キャンセルボタンを押すと(このタイミングでエラー2)クラッシュしてしまいます。

以下のようなエラー内容が出ました。

  1. which is already presenting (null)

  2. unrecognized selector sent to instance

  3. unrecognized selector sent to instanceは

addボタンの
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action:#selector(onAddTapped(_:)))において、

ここを参考にすると、問題ないはずなのですが、
(https://teratail.com/questions/192136)

  1. which is already presenting (null)が分かりません。

alertがすでに表示されているという意味だと思うのですが、、、、

試しに
self.present(alert, animated: true, completion: nil)
の部分をコメントアウトすると上記二つのエラーは消えたので、ここが原因だと思うのですが、この先どうすれば良いのか分かりません。。。

対処法知っておられる方いましたら、教えてください。
よろしくお願いします。

swift

import UIKit class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var searchController: UISearchController! var words = [String]() var searchResults:[String] = [] override func viewDidLoad() { super.viewDidLoad() //高さ自動調整 tableView.rowHeight = UITableView.automaticDimension //余分なセルを非表示 self.tableView.tableFooterView = UIView() navigationItem.leftBarButtonItem = editButtonItem let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action:#selector(onAddTapped(_:))) navigationItem.rightBarButtonItem = addButton setupSearchBar() } func setupSearchBar() { searchController = UISearchController(searchResultsController: nil) searchController.searchResultsUpdater = self searchController.searchBar.delegate = self searchController.searchBar.frame = CGRect(x: 0, y: 0, width: 0, height: 60) //searchController.searchBar.sizeToFit() searchController.searchBar.placeholder = "WAROTA" searchController.searchBar.tintColor = UIColor.red searchController.searchBar.keyboardType = UIKeyboardType.default searchController.dimsBackgroundDuringPresentation = false searchController.hidesNavigationBarDuringPresentation = false tableView.tableHeaderView = searchController.searchBar } @objc func onAddTapped(_ sender: Any) { let alert = UIAlertController(title: "単語を登録", message: "Enter Chinese",preferredStyle: .alert) alert.addTextField {(ChineseTH) in ChineseTH.placeholder = "words" } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) let okAction = UIAlertAction(title: "Add", style: .default) { (_) in guard let word = alert.textFields?.first?.text, word.count > 0 else { return } self.insertCellRow(word) } alert.addAction(cancelAction) alert.addAction(okAction) self.present(alert, animated: true, completion: nil) } func insertCellRow(_ word: String){ words.insert(word, at: 0) let indexPath = IndexPath(row: 0, section: 0)//初期化 tableView.insertRows(at: [indexPath], with: .automatic)//新しいセルを挿入しているだけ } } // MARK: - tabeleView extension ViewController: UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return words.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") let word = words[indexPath.row] cell?.textLabel?.text = word return cell! } } // MARK: - searchBar extension ViewController: UISearchResultsUpdating { func updateSearchResults(for searchController: UISearchController) { self.searchResults = words.filter{ $0.lowercased().contains(searchController.searchBar.text!.lowercased()) } } } // MARK: - searchBar extension ViewController: UISearchBarDelegate { func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { } func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { searchBar.text = "" tableView.reloadData() } func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { } }

補足情報(FW/ツールのバージョンなど)

xcode11.1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています