[ios]切换到 xcode 6 通用-突然控制器不符合 UITableViewDataSource 再

发布时间: 2017/3/27 20:18:34
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

今天我更新到最新发布的 xCode 6 通用。当我试图建立我的应用程序现在得到了编译器错误,并说我处理表的视图控制器之一"不符合Protocol UITableViewDataSource"。一切都能正常工作之前 (使用 xCode 6 β 5)

根据文档议定书 》 要求 2 种方法︰

— — tableView:cellForRowAtIndexPath︰ 所需方法

— — tableView:numberOfRowsInSection︰ 所需方法

他们两个都被实施︰

 func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
        return feed!.count
 }

 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        println("HashtagDetailViewController: tableView - cellForRowAtIndexPath called")

        let cell = tableView.dequeueReusableCellWithIdentifier("postCell", forIndexPath: indexPath) as PostTableCell
        cell.loadItem(feed!.toArray()[indexPath.row])
        return cell
 }

我错过了什么吗?有新的所需的方法在文档中不是吗?谢谢你帮忙

解决方法 1:

许多 Swift 签名已更改件新的 beta 版中使用。所以您现有的实现成为一种重载的本地方法,而不是Protocol方法的实现。如果它是在议定书 》 所需的方法,你会得到这些消息,因为编译器假定您没有执行所需的方法。

在这里它是轻微的烦恼,但它是更危险的如果你已经改变了他们的签名这种Protocol中有可选方法的实现。你不会得到任何编译器警告和你想的方法实施议定书 》 永远不会调用方法。

你必须检查每个的任何这种现有的实现手动确保以上到您的代码不会发生。

做到这一点的最简单方法是将光标置于每个此类方法标头,因为你通常会做在侧窗获取快速帮助的方法。如果它正确键入作为Protocol方法,你将看到在快速帮助,它在结束了中定义的框架方法的说明。如果签名差别使它成为一个地方的方法,你不会看到任何快速帮助窗口中的描述,但相关方法的清单和更多告诉说,它在本地文件中定义的线。

我不知道什么办法来防止之后框架变化这样手动检查每个这种现有的可选实现您的代码中。

议定书 》 已略有改变︰

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

现在是︰

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
赞助商