Swift-app 在 UITableView 中选择行时崩溃
Posted
技术标签:
【中文标题】Swift-app 在 UITableView 中选择行时崩溃【英文标题】:Swift-app crashes on row selection in UITableView 【发布时间】:2015-05-04 20:15:43 【问题描述】:我在使用 Swift 中的 UITableView 时遇到问题。 只要我不实现处理单元格选择的委托函数,它就可以正常工作。
这是我非常简单的类,它充当表视图委托和数据源:
import UIKit
class TableViewService : NSObject, UITableViewDataSource, UITableViewDelegate
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = UITableViewCell()
if(indexPath.row == 0)
cell.textLabel?.text = "One"
else
cell.textLabel?.text = "Two"
cell.selectionStyle = .None
return cell;
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 2
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
log.debug("Row selceted")
只要我在表视图中选择一行,应用程序就会崩溃,并在 objc_msgSend 中出现 EXEC_BAD_ACCESS 错误 - 控制台中没有记录任何错误,如果我在 didSelectRowAtIndexPath 函数上设置断点,它永远不会被触发。
任何想法我错过了什么或做错了什么?
【问题讨论】:
想显示视图控制器的代码,你的 tableview 是在哪里实现的? 什么是log
,你为那个类初始化了吗?
@RoryMcKinnel - 日志实例是一个全局 XCLogger。但在这种情况下它不相关。我在 didSelectRowAtIndexPath 函数中输入了什么代码并不重要 - 它仍然会崩溃。
@AndreSlotta - 我的 ViewController 基本上只加载一个包含表格视图的 NIB 文件。我已将委托和数据源设置为 NIB 文件中的对象。也许最好从视图控制器手动设置它们。
【参考方案1】:
以下是我为顺利创建您的项目所采取的步骤。如果你在某个地方错过了一步,也许它会有所帮助?:
1) 在storyboard中设置UITableView
作为ViewController
的子视图
2) 将代码添加到ViewController
(您的自定义类)
class ViewController: UIViewController
@IBOutlet var tableView:UITableView!
let tableService:TableViewService = TableViewService()
override func viewDidLoad()
super.viewDidLoad()
tableView.delegate = tableService
tableView.dataSource = tableService
3) 确保插座在ViewController
和tableView
之间连接
4) TableViewService
类是从您上面的代码中复制/粘贴的(除了我使用println()
而不是log.debug
)
如果我确定了这三件事,那么我可以看到委托方法被调用而没有崩溃。
【讨论】:
我已将委托和数据源设置为 NIB 文件中的对象。也许最好从视图控制器手动设置它们 - 我会尝试这种方法。 在代码中设置数据源和委托时有效。我想这适合我懒惰并在 Interface Builder 中做这件事。 :) 很高兴我上面的方法对你来说很好:) 虽然我很好奇你的意思是你将它们设置为“对象” - 复数。您应该能够将单个对象添加到您的NIB,确保它是正确的类TableViewService
,将tableView
的delegate
和dataSource
直接连接到该对象。确保它们与ViewController
断开连接。这种方法也适用于我。
抱歉 - 我的完整应用程序有两个表格视图,其中有单独的服务对象作为数据源/委托。所以我每个都有一个对象,因此是复数。只要这种方法有效 - 我会保持原样。以上是关于Swift-app 在 UITableView 中选择行时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
如果 UITableView 在 UIScrollView 中,则无法在 UITableView 上执行滑动删除
如何在没有数组的 UITableView 中显示 UITableView Cell?
保持 uisearchbar 在 uitableview 中始终可见
调整 UITableView 高度(嵌入在 UIScrollView 中)
iOS UITableView删除组中唯一行,即[UITableView _endCellAnimationsWithContext:] warning