Problema NSTableView excluindo a última linha
-
20-09-2019 - |
Pergunta
Já faz um tempo desde que eu mexi com o meu tabelaviewcontroller, então estou um pouco enferrujado ... mas agora gostaria de configurá -lo para que, quando uma seção tivesse zero linhas para exibir (a matriz está vazia), ela "mentirá" "Para o controlador e retorne 1 para o númerofRowsSinsection. Em seguida, no CellForrowatIndexpath, ele colocará um uilabel sobre a célula de uma linha que diz algo no efeito de "esta seção está vazia".
O problema é quando a tabela está no modo de edição e o usuário exclui a última linha, recebo o seguinte erro:
Terminando o aplicativo devido à exceção não capturada 'nsinternalinconSistEncyException', razão: 'Atualização inválida: número inválido de linhas na seção 1. O número de linhas contidas em uma seção existente após a atualização (1) deve ser igual ao número de linhas contidas em que Seção antes da atualização (1), mais ou menos o número de linhas inseridas ou excluídas dessa seção (0 inserido, 1 excluído).
Parece estar chateado que, após o deslize uma fila, ela tenta redesenhar a mesa, descobre que a última linha ainda está lá. Onde/como devo lidar com isso? Certamente estou Capping em todo o HIG da Apple, até certo ponto, mas é confuso para meus usuários ter apenas um cabeçalho sobre uma seção vazia ...
obrigado!
Solução
Você precisa realmente inserir sua linha "falsa" usando -insertRowsAtIndexPaths:withRowAnimation:
. Do ponto de vista do UitableView, não há linhas "reais" ou linhas "falsas". Há quaisquer linhas que o DataSource diz que existem. Então você teve 1 linha e depois excluiu 1 linha e, em seguida, o UitableView perguntou: "Quantas linhas existem" e você disse 1, e o UitableView disse "1 - 1 = 1. Espere, o que? Blam".
Se você deseja inserir uma linha ("real" ou "falsa" é a mesma), você precisa dizer ao UitableView que está inserindo.