2011-11-25 6 views
6

Tengo un problema al intentar cargar un prototipo de celda cuando Voiceover está activado. La aplicación se bloquea y consigo los erroresios 5 prototipos de celdas y problema de VoiceOver

Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] 

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' 

Esto sólo ocurre cuando VoiceOver está activado, de lo contrario la aplicación se ejecuta bien. ¿Alguna ayuda?

+0

Si alguien más está teniendo problemas con este problema, archivé un error con Apple sobre este problema. –

+0

¡Tengo el mismo problema! Hoy comencé a agregar sugerencias de accesibilidad y otras cosas a mi aplicación. Eso realmente apesta. ¿Podría agregar la identificación del radar aquí para que yo/nosotros podamos duplicar el error? Todavía tengo ese error en 5.1 beta 2! –

+0

@ChristianBeer encontró su error en Open Radar y lo duplicó. (rdar: // 10763569) Gracias. – edelaney05

Respuesta

0

No estoy seguro de si hice esto bien por casualidad, pero esto funcionó para mí. En el UITableViewDataSource:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    [...] 

    UITableViewCell *standardCell; 
    if (UIAccessibilityIsVoiceOverRunning()) { 
     standardCell = [tableView dequeueReusableCellWithIdentifier:@"VO Cell"]; 
    } else { 
     standardCell = [tableView dequeueReusableCellWithIdentifier:@"Regular Cell"]; 
    } 

    //Configure the cell 
    [...] 

    return standardCell; 

} 

creo que es el caso que el IOS almacena en caché las células sin las propiedades de accesibilidad VoiceOver si se apaga por razones de rendimiento. Por lo tanto, el Identificador predeterminado que utiliza puede estar relacionado con una Celda en caché que no tiene estas propiedades. Cuando VoiceOver está encendido y iOS intenta dequeue estas Celdas, no encuentra las propiedades allí y se rompe. Al tener Identificadores diferentes, obligas a iOS a almacenar en caché nuevas Células cuando está activado el VO.

De nuevo, esto es solo una suposición que estoy haciendo, pero el caso es que no entiendo este problema cuando dequeo Cells de esta manera. Sin embargo, si los quita de la forma en que lo mencioné, tendría que tener cuidado con un error que pueda surgir:

Si está seleccionando las celdas cuyos identificadores están establecidos en un archivo .xib o en un Guión gráfico, como en la imagen de abajo, entonces tendría que establecer otra Celda de Prototipo con el Identificador de Reutilización de VO. Reuse Identifier set in Interface Builder