将单元格插入表格时,自定义表格视图单元格内的图像视图消失

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 - 点击自定义表格视图单元格中的删除表格视图行按钮

在自定义表格单元格内检测多个 UI 视图的点击/触摸的理想方法是啥?

如何在表格视图中加载不同的自定义单元格

表格视图单元格内的 UIImage

如何在表格视图单元格内创建集合视图

在 ios 中展开和折叠表格视图单元格