2016-03-26 11 views
2

以下はmy tableViewのコードです。定義が前の値と競合しているというcellForRowAtIndexPath関数宣言にエラーがあります。以前のスタックオーバーフローの問題は、関数がオプションの値としてUITableViewCellを返すようにするソリューションを持っていますが、これは私のためにエラーを修正しません。 viewControllerがプロトコルUITableViewDataSourceに準拠していないというエラーもありますが、これはcellForRowAtIndexPathメソッドのエラーが原因であると想定しています。swift cellForRowAtIndexPath定義が前の値と矛盾しています

私は、動作するtableViewに似たコードを持っていますが、Xcodeを更新する前に約1ヶ月前に書かれています。おそらく、最近の迅速な変更により、このエラーが発生していますか?

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int 
    { 

     return 1 

    } 


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell? { 

     let cellIdentifier = "tableViewCell" 

     let newCell : TableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! TableViewCell 


     newCell.heading.text = names[indexPath.row] 

     return newCell 


    } 
+0

リアル問題は、あなたが定義した関数がUITableViewCellを返すことです? UITableViewCellを返す必要があります。 ?を削除しますか?戻り値の型から。 – ryantxr

+0

いや私は一緒に試してみましたか?まだエラーが発生していた – ray

+0

?間違いなく正しい方法です。 – ryantxr

答えて

2

このようなクラスの拡張で、あなたのデータソースメソッドを配置してみてください。

extension yourViewController: UITableViewDataSource { 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // cellForRow stuff 
    } 

} 
+0

参考までに、これはちょっとしたハックですが、問題の修正ではありません。 – PeejWeej

0

これはのUITableViewControllerにある場合は、メソッドにオーバーライドを追加する必要があります。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
+0

私はこれが動作するとは思わないので、私は通常のビューコントローラを使用していますUITableViewControllerではありません。 – ray

+0

UIViewControllerのサブクラスですか?あなた自身のクラスの1つですか? – PeejWeej

+0

質問に投稿したコードはすべて、UIViewControllerのサブクラスであるViewControllerというカスタムクラス内にあります。私はあなたの提案を試みたときに、上書きはクラスメンバーにしか指定できないと言います – ray

関連する問題