web-dev-qa-db-ja.com

「プロトコルが実装されていない」を修正する方法

TestControllerという新しいコントローラーを作成するときに、

<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UISearchBarDelegate>

test.hのインターフェースへ

シミュレーターでアプリを実行すると、「実装が不完全」や「プロトコルのメソッドが実装されていない」という問題がたくさんあります。

一部のメソッドが実装されていないことは知っていますが、どれですか?追加するメソッドを知るにはどうすればよいですか?

25
user4951

問題ナビゲーターを表示し、「プロトコルのメソッドが実装されていない」問題の1つを展開します。最初の詳細項目は、メソッドがヘッダーのどこで定義されているか(したがって、どの@プロトコルにあるか)を示します。ただし、さらに良いことに、2番目の詳細にはプロトコルの名前が表示されます。

課題ナビゲーターに切り替えます。 不完全な実装メッセージを無視し、プロトコルのメソッドが実装されていないメッセージを確認します。このメッセージを展開して、コンパイラーが提供した詳細情報を取得できます。最初の詳細はあなたが探しているものです:

Method declared here

ここで、tableView:numberOfRowsInSection:のメソッドを含めるのを忘れていることがわかります。この宣言をコピーして自分のコードに貼り付け、メソッドの記述を開始できます。

私の問題ナビゲーターには3つの問題があることに注意してください。 3つ目は、別の欠落しているメソッドです。これも同じ方法で展開およびコピーできます。

65
Steven Fisher

あなたが探すことができると私が考えることができる2つのことがあります。まず、.hファイルを調べて、実装を忘れた可能性のあるメソッドプロトタイプがあるかどうかを確認します。または、実装してから、プロトタイプのメソッドシグネチャと一致しなくなるように実装を変更します。

次に、コンパイラが不足しているメソッドを教えてくれない場合は、UITableViewDelegateUITableViewDataSourceなどのドキュメントを参照してください。さまざまなパブリッククラスとインスタンスが一覧表示されている[タスク]セクションで、メソッドの場合、そこにある必要があるものの横に「必須メソッド」と表示されます。たとえば、クラスがUITableViewDataSourceデリゲートプロトコルに準拠している場合、-tableView:cellForRowAtIndexPath:-tableView:numberOfRowsInSection:が必要です。

6
Zev Eisenberg

実装ファイルをチェックして、そこに含まれているかどうかを確認してください。そのビットがある場合は、それを削除する必要があります。

0
Rashid

Projectname-Prefix.pchファイルを確認してください。私はそこに夢中になり、持ってはいけないものをインポートしました。そのため、そのクラスで実装していた1つのプロトコルが実装されていないように見えましたが、実際には実装されていました。先に進んで、そこにプロトコルが含まれていないことを確認してください。

私の場合、インポートすべきではなかったファイルがanotherプロトコルファイルであり、警告が表示されていたクラスに直接関係していなかったためです。

また、* -Prefix.pchファイルをクリーンアップするときは、必ずXcodeを閉じてから再度開いてください。私はそれを取るためにそれをしなければなりませんでした。

お役に立てれば!!

0
jpswain