Esta es la primera vez que me ocupo del desarrollo de iOS. Estoy creando una aplicación que usa una UITableViewCell personalizada para mostrar la información recuperada de Core Data. Tengo este problema en el que un imageView que muestra un color desaparece aleatoriamente cuando la celda se inserta en la tabla. Si la vista de la imagen desaparece, cerrar la aplicación y reiniciarla solucionará el problema.

Inmediatamente después de insertar en la tabla: pic Después de forzar el cierre de la aplicación y reiniciar: pic

Se agradecería cualquier consejo sobre dónde está el problema.

Aquí tienes algunos de los códigos relevantes. También estoy usando NSFetchedResultsController si eso ayuda.

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!)
    }
}
1
C.Koelemay 1 ago. 2016 a las 21:40

2 respuestas

La mejor respuesta

Parece ser un problema de encuadre porque no solo faltan otras dos etiquetas de la vista de imagen para la fecha y otra etiqueta, ¿le está agregando restricciones?

0
Surbhi Garg 1 ago. 2016 a las 19:25

Del código que ha compartido, puedo sugerir lo siguiente:

Verifique su método configureCell, parece que es nulo para ese período de tiempo. Llegué a esa conclusión de su primera captura de pantalla: en lugar de texto, tiene un marcador de posición especificado en Su guión gráfico / xib.

Entonces, verifique si

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

Devuelve el objeto adecuado de su controlador de recuperación (actualícelo, si eso no es cierto).

Espero que esto ayude.

0
Doro 1 ago. 2016 a las 19:24