将单元格插入表格时,自定义表格视图单元格内的图像视图消失
Posted
技术标签:
【中文标题】将单元格插入表格时,自定义表格视图单元格内的图像视图消失【英文标题】:Image view inside custom table view cell disappears when cell inserted into table 【发布时间】:2016-08-01 18:40:51 【问题描述】:这是我第一次接触 ios 开发。我正在创建一个使用自定义 UITableViewCell 来显示从核心数据检索到的信息的应用程序。我有这个问题,当单元格插入表格时,显示颜色的 imageView 会随机消失。如果图像视图确实消失了,关闭应用并重新启动它会解决问题。
插入表格后:pic 强制关闭应用并重启后:pic
任何关于问题所在的建议将不胜感激。
这里是一些相关的代码。如果有帮助,我也在使用 NSFetchedResultsController。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> CustomTableViewCell
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell") as! CustomTableViewCell
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject
self.configureCell(cell, withObject: object)
return cell
func configureCell(cell: CustomTableViewCell, withObject object: NSManagedObject)
let imageData: NSData = object.valueForKey("image") as! NSData
let colorImageBlank: UIImage = UIImage(named: "blank.png")!
let picture: UIImage = UIImage(data: imageData)!
let date: NSDate
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.currentLocale()
cell.cellImage.image = picture
let colorString = object.valueForKey("color")!.description
var color: UIColor = UIColor()
if colorString == "Blue"
color = UIColor.blueColor()
else if colorString == "Red"
color = UIColor.redColor()
else if colorString == "Green"
color = UIColor.greenColor()
else if colorString == "Yellow"
color = UIColor.yellowColor()
else if colorString == "Orange"
color = UIColor.orangeColor()
else if colorString == "Purple"
color = UIColor.purpleColor()
cell.colorImage.image = colorImageBlank
cell.colorImage.backgroundColor = color
cell.colorImage.layer.cornerRadius = 5.0
cell.cellImage.layer.borderWidth = 2
cell.cellImage.layer.borderColor = color.CGColor
cell.cellImage.layer.cornerRadius = 5.0
cell.locationNameLabel.text = object.valueForKey("name")!.description
cell.locationNameLabel.font = UIFont.boldSystemFontOfSize(14.0)
cell.locationNameLabel.lineBreakMode = NSLineBreakMode.ByTruncatingTail
cell.categoryLabel.text = object.valueForKey("category")!.description
cell.categoryLabel.font = UIFont.italicSystemFontOfSize(12.0)
cell.categoryLabel.lineBreakMode = NSLineBreakMode.ByTruncatingTail
date = object.valueForKey("date")! as! NSDate
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
cell.dateLabel.text = dateFormatter.stringFromDate(date)
cell.descriptionLabel.text = object.valueForKey("descript")!.description
cell.descriptionLabel.lineBreakMode = NSLineBreakMode.ByTruncatingTail
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)
switch type
case .Insert:
tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
case .Delete:
tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
case .Update:
self.configureCell(tableView.cellForRowAtIndexPath(indexPath!)! as! CustomTableViewCell, withObject: anObject as! NSManagedObject)
case .Move:
tableView.moveRowAtIndexPath(indexPath!, toIndexPath: newIndexPath!)
【问题讨论】:
您是否尝试调试您的 configureCell 方法并检查此时是否存在对象? 所以事实证明,当插入单元格时,图像视图以及描述和日期的标签就消失了。这是一个约束问题吗? 【参考方案1】:这似乎是一个框架问题,因为不仅图像视图还有两个日期标签和其他标签也丢失了,你是否在添加约束?
【讨论】:
哇,我太专注于 imageView 没有显示,我没有意识到这些标签丢失了。我确实对单元格有限制,这可能是问题吗? 所以在调查了约束之后,我发现问题出在尺寸类上。我切换回 Any x Any,布局问题已解决!【参考方案2】:根据您分享的代码,我可以提出以下建议:
检查您的 configureCell 方法,那段时间似乎为零。 我从您的第一个屏幕截图中得出了这样的结论:您在 Storyboard/xib 上指定了占位符,而不是文本。
所以,检查一下
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject
从您的 fetch 控制器返回正确的对象(如果不正确,请更新它)。
希望这会有所帮助。
【讨论】:
所以我已经调试了 configueCell 方法并且该对象确实存在,但是在单步执行该函数后,这些错误显示在控制台中:2016-08-01 14:14:50.664 Scrapper[4654: 503178] _BSMachError: (os/kern) 无效能力 (20) 2016-08-01 14:14:50.664 Scrapper[4654:503178] _BSMachError: (os/kern) invalid name (15) 这些与错误有关吗?以上是关于将单元格插入表格时,自定义表格视图单元格内的图像视图消失的主要内容,如果未能解决你的问题,请参考以下文章
Obj-C - 点击自定义表格视图单元格中的删除表格视图行按钮