Swift坑-tableView中注册cell
文章目录
tableView.registerClass in swift is fatal error
- 注册cell时会出问题,但是注册一个cell时应该和原类没关系吧,我特意新建了一个工程进行测试,没有问题。那很可能就是这个工程有问题。但是问题在哪呢?
- 姑且认为在注册cell的上下文
- 分析
- 首先
SLQHomeTableViewController
继承自SLQBaseTableViewController
,SLQBaseTableViewController
继承自UITableViewController
- 其次在
SLQHomeTableViewController
的viewDidLoad
方法中进行cell的注册没有问题(问题就在这里) - 为什么位注册失败
- 首先
- 结果1
- 直接将
SLQHomeTableViewController
的父类换成UITableViewController
注册cell没有问题 - 还是不行
- 直接将
结果2
- 重新写了一遍,还是出问题
问了下大牛,才知道原来是上一步中有一个判断没有return,导致tableView没有创建,所以注册会出问题。 - 主要那个if语句没有返回,本意是判断一下是否登录,如果没有登录就显示默认界面,这样的话UITableView就没有创建,注册当然会出问题。
override func viewDidLoad() {
super.viewDidLoad()
// 1.如果没有登录, 就设置未登录界面的信息
if !userLogin
{
defaultVistorView?.setupVisitorInfo(true, imageName: "visitordiscover_feed_image_house", message: "关注一些人,回这里看看有什么惊喜")
return
}
// 2.初始化导航条
setupNav()
// 3、注册cell
tableView.registerClass(StatusNormalTableViewCell.self, forCellReuseIdentifier: StatusTableViewCellIdentifier.NormalCell.rawValue)
tableView.registerClass(StatusForwardTableViewCell.self, forCellReuseIdentifier: StatusTableViewCellIdentifier.ForwardCell.rawValue)
tableView.separatorStyle = UITableViewCellSeparatorStyle.None
// 显示刷新控件
refreshControl = HomeRefreshControl()
refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
// 4、加载微博数据
loadData()
}
下面的stackflow上得问题
I use Xcode7
i register the cell in viewDidLoad()
let SLQHomeTableViewCellID = "SLQHomeTableViewCellID"
self.tableView.registerClass(SLQStatusCell.self, forCellReuseIdentifier: SLQHomeTableViewCellID)
then the dataSouce like below:
// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return statuses?.count ?? 0
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(SLQHomeTableViewCellID, forIndexPath: indexPath) as! SLQStatusCell
let status = statuses![indexPath.row]
cell.status = status
return cell
}
i also override init()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
// 初始化UI
setupUI()
}
but when i run in simulator ,it's a fatal error in register cell ,this line is the error appeared
self.tableView.registerClass(SLQStatusCell.self, forCellReuseIdentifier: SLQHomeTableViewCellID)
fatal error: unexpectedly found nil while unwrapping an Optional value
i want to why,i run the program in using OC is all right.
fatal error: array cannot be bridged from Objective-C
- 将一个[UIImage]数组传递到一个[UIImage?]时爆出这个错误
- 解决方法
- 显示指出数组的类型
let images: [UIImage?] = photoSelectorVC.pictureImages
- 显示指出数组的类型