Pergunta

Eu tenho um UITableViewController gestão de um tableView agrupados. O tableView é preenchida de uma fetchedResultsController.

Se eu clicar no botão Editar na NavigationBar, em seguida, selecione a linha e clique no botão Excluir botão, a linha é excluída e tudo termina bem.

No entanto, se eu deslizar para revelar o botão Excluir em uma linha e clique no botão Excluir, o aplicativo trava com o seguinte erro:

2010-01-06 15: 25: 18,720 Take10 [14415: 20b] sério erro de aplicação. Exceção foi pego durante o processamento do núcleo mudança de dados: - [NSCFArray objectAtIndex:]: índice (1) além dos limites (1) com userInfo (null)

2010-01-06 15: 25: 18,721 Take10 [14415: 20b] terminação app devido à exceção não capturada 'NSRangeException', razão: '*** - [NSCFArray objectAtIndex:]: índice (1) além dos limites (1 ) '

É claro que o número de índice nas mudanças de erro, dependendo do número de linhas na seção onde eu estou tentando excluir uma linha, e esse número é mais 1 do que o número de linhas restantes na seção tabela após a tentativa de excluir.

Aqui está o código onde eu tentar excluir os dados do fetchedResultsController. O mesmo método responde a ambos os cenários, então eu não entendo por que ele trava quando passando.

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Delete the managed object for the given index path
    NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
    [context deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];

    // Save the context.
    NSError *error = nil;
    if (![context save:&error]) {
        /*
         Replace this implementation with code to handle the error appropriately.

         abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
         */
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
  }   
}

Todas as ideias ???

Graças

Jk

Foi útil?

Solução

Jeff LaMarche tem feito um bom trabalho com NSFetchedResultsController.

Tente usar o seu modelo aqui: http://iphonedevelopment.blogspot.com/2010/ 01 / navegação baseada-core-data-application.html

E ver se isso resolve o problema.

Outras dicas

Uma diferença entre normal e furto de exclusão é que o último tableView:willBeginEditingRowAtIndexPath chamada vontade e tableView:didEndEditingRowAtIndexPath. Na verdade, isso é uma boa maneira de suprimir o recuo e mostrando de uma linha de inserção.

Outra diferença é que setEditing: é chamado (com NO como o valor do parâmetro) imediatamente após a exclusão.

Definir pontos de interrupção em qualquer um desses três funções que você definiu / substituídas e veja se você pode diminuir, onde ele está acontecendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top