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

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

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

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

Swift

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

Q&A

解決済

1回答

2245閲覧

[Swift] UITableView: unrecognized selector sent to instance ***

noramimiyuma

総合スコア25

iOS

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

Swift

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

0グッド

0クリップ

投稿2017/03/03 08:45

UITableViewControllerのサブクラス内で、NavigationBar上に設置したボタンを押すと行が削除されるというごく一般的な処理を実装しようとして詰まっています。

状況としては、削除ボタンを初期化する際に記述したactionが正しく機能していないためか、ボタンタップ時に指定したメソッドが呼び出せず掲題のエラーが出てしまいます。

どの部分が間違っているか教えていただけますでしょうか。

※コードは簡略化しています

Swift

1class FavoriteListViewController: UITableViewController { 2 3 var deleteButton: UIBarButtonItem? 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 self.deleteButton = UIBarButtonItem( 9 title: "削除(0)", 10 style: .plain, 11 target: self.tableView, 12 action: #selector(FavoriteListViewController.deleteSelectedRows) 13 ) 14 15 } 16 17 func deleteSelectedRows() { 18 self.selectedRowsEditing?.forEach{indexPath in 19 items.remove(at: indexPath.row) 20 } 21 } 22 23}

actionの設定とメソッドの宣言の方法を少しずつ変えた以下のパターンも試しましたが、どれも状況は変わらずでした。

Swift

1 self.deleteButton = UIBarButtonItem( 2 title: "削除(0)", 3 style: .plain, 4 target: self.tableView, 5 action: #selector(FavoriteListViewController.deleteSelectedRows(_:)) 6 ) 7 8 func deleteSelectedRows(_ sensor: UIBarButtonItem) { //UIButtonにしてもダメ 9 // *** 10 }

Swift

1 self.deleteButton = UIBarButtonItem( 2 title: "削除(0)", 3 style: .plain, 4 target: self.tableView, 5 action: #selector(FavoriteListViewController.deleteSelectedRows(sensor:)) 6 ) 7 8 func deleteSelectedRows(sensor: UIBarButtonItem) { //UIButtonにしてもダメ 9 // *** 10 }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

target: self.tableView

target: self
に変更したらできました。

FavoriteListViewControllerに宣言したメソッドをスーパークラスから呼び出そうとしていたことになるので、そりゃ当然バグりますよね...

投稿2017/03/03 10:27

noramimiyuma

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問