¿Cómo capturo UIImage de contenidos completos de UITableView / UIScrollView y hago que funcione en un dispositivo iOS?

Estoy usando este código maravillosamente elegante.Obtención de una captura de pantalla de un UIScrollView, incluidas las partes fuera de la pantalla para capturar todo el contenido de un UITableView para exportarlo a un UIImage.

UIGraphicsBeginImageContextWithOptions(self.controller.tableView.contentSize, YES, 0);
{
    CGPoint savedContentOffset = self.controller.tableView.contentOffset;
    CGRect savedFrame = self.controller.tableView.frame;

    self.controller.tableView.contentOffset = CGPointZero;
    self.controller.tableView.frame = CGRectMake(0, 0, self.controller.tableView.contentSize.width, self.controller.tableView.contentSize.height);

    [self.controller.tableView.layer renderInContext: UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();

    self.controller.tableView.contentOffset = savedContentOffset;
    self.controller.tableView.frame = savedFrame;
}

UIGraphicsEndImageContext();

Funciona fantásticamente bien en el simulador, sin embargo, cuando ejecuto este código en un dispositivo iOS (iPhone 4s) obtengo un salto completo de los siguientes errores cuando se llama a este método:

[self.controller.tableView.layer renderInContext: UIGraphicsGetCurrentContext()];

Errores:

Error: CGContextTranslateCTM: invalid context 0x2924b0
Error: CGContextDrawImage: invalid context 0x2924b0
Error: CGContextRestoreGState: invalid context 0x2924b0
Error: CGContextSaveGState: invalid context 0x2924b0
Error: CGContextScaleCTM: invalid context 0x2924b0
Error: CGContextClipToRect: invalid context 0x2924b0
etc...

Este código funciona bien cuando la tabla ve el tamaño del contenido dentro de sus límites, pero tan pronto como es mayor que sus límites (incluso por 1 píxel) ingresa en un bucle sin fin de los errores anteriores. Pero esto solo pasa en el dispositivo. No el simulador.

¿Algunas ideas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta