当单元格插入表

时间:2016-08-01 18:40:52

标签: ios swift uitableview core-data

这是我第一次处理iOS开发。我正在创建一个使用自定义UITableViewCell显示从Core Data检索的信息的应用程序。我有这个问题,当单元格插入表格时,显示颜色的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!)
    }
}

2 个答案:

答案 0 :(得分:0)

从您分享的代码我可以建议以下内容:

检查你的configureCell方法,似乎在那段时间内是零。 我从你的第一个截图中得出了这样的结论:你在storyboard / xib中指定了占位符而不是文本。

所以,检查是否

 let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject

从fetch控制器返回正确的对象(更新它,如果不是这样的话)。

希望这有帮助。

答案 1 :(得分:0)

这似乎是一个框架问题,因为不仅图像视图另外两个标签的日期和其他标签也缺失,你是否添加约束?