2011-11-25 19 views
6

Ho riscontrato un problema durante il tentativo di caricare una cella prototipo quando Voiceover è attivo. Arresto anomalo dell'applicazione e ottengo gli erroriCellule prototipo ios 5 e problema VoiceOver

Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] 

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

questo accade solo quando VoiceOver è attivo, altrimenti l'applicazione viene eseguita correttamente. Qualsiasi aiuto?

+0

Se qualcun altro ha problemi con questo problema, ho presentato un bug a Apple su questo problema. –

+0

Ho lo stesso problema! Oggi ho iniziato ad aggiungere suggerimenti e materiale per l'accessibilità alla mia app. Questo fa davvero schifo. Potresti aggiungere l'id del radar qui così posso duplicare il bug. Ho ancora quel bug in 5.1 beta 2! –

+0

@ChristianBeer ha trovato il tuo bug in Open Radar e l'ha duplicato. (rdar: // 10763569) Grazie. – edelaney05

risposta

0

Non sono sicuro di averlo capito per caso, ma questo ha funzionato per me. Nella 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; 

} 

Credo sia il caso che IOS memorizza cellule senza le proprietà di accessibilità VoiceOver se viene spento per motivi di prestazioni. Quindi l'identificatore predefinito che si utilizza potrebbe essere correlato a una cella memorizzata nella cache che non ha queste proprietà. Quando VoiceOver è attivo e iOS tenta di dequeue queste celle, non trova le proprietà al suo interno e le interruzioni. Avendo Identificatori diversi, costringi iOS a mettere in cache le nuove celle quando VO è attivo.

Ancora, questa è solo un'ipotesi che sto facendo, ma il caso è che non ottengo questo problema quando accodo le celle in questo modo. Tuttavia, se li rimuovi dal modo in cui li ho citati, dovresti fare attenzione a un errore che potrebbe verificarsi:

Se stai eliminando le celle i cui identificatori sono impostati in un file .xib o in uno storyboard, come nell'immagine qui sotto, dovresti quindi impostare un'altra cella prototipo con l'identificatore di riutilizzo VO. Reuse Identifier set in Interface Builder

Problemi correlati