Esperançosamente, esta será uma solução rápida. Tenho tentado descobrir o erro que continuo recebendo. O erro está listado abaixo e o appdelagate está abaixo disso.
Qualquer ajuda é apreciada.
obrigado
2012-04-12 21: 11: 52.669 Chanda [75100: f803] --- Falha de declaração em
-[UITableView _endCellAnimationsWithContext:]
,/SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:1037
2012-04-12 21: 11: 52.671 Chanda [75100: f803] --- Encerrando aplicativo devido a exceção não capturada 'NSInternalInconsistencyException
' , motivo: 'Atualização inválida: número inválido de linhas na seção 0. O número de linhas contidas em uma seção existente após a atualização (2) deve ser igual ao número de linhas contidas nessa seção antes da atualização (2), mais ou menos o número de linhas inseridas ou excluídas daquela seção (1 inserido, 0 excluído) e mais ou menos o número de linhas movidas para dentro ou para fora dessa seção (0 movido para dentro, 0 movido para fora). '
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize databaseName,databasePath;
- (BOOL)application: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
self.databaseName = @"Customers.db";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir = [documentPaths objectAtIndex:0];
self.databasePath = [documentDir stringByAppendingPathComponent:self.databaseName];
[self createAndCheckDatabase];
return YES;
}
- (void)createAndCheckDatabase {
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:databasePath];
if (success) return;
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}
@end
fonte
Respostas:
Não vejo razão para você nos mostrar esta parte do código. Seu erro deve estar conectado a esta parte do seu código, presumo
Provavelmente você está cometendo um erro em um desses métodos de fonte de dados. Atualmente é impossível dizer o que exatamente está errado, mas suponho que poderia ser algo como: Você está dizendo à visualização da tabela no
numberOfRowsInSection
que gostaria de ter n linhas reservadas e configuradas e nocellForRowAtIndexPath
então você só lida com n - 1 linhas, por exemplo.Lamento que esta resposta não possa ser tão precisa como deveria. Se você nos mostrar sua implementação de sua fonte de dados, será muito mais fácil saber o que está acontecendo.
fonte
Como Sun Tzu disse : é melhor vencer sem lutar . No meu caso, sempre que vejo esse tipo de mensagem de erro (ou seja, discrepância entre as linhas adicionadas, excluídas etc.) .. Eu nem mesmo depuro nada .. Eu simplesmente evito fazer aquela chamada extra em que recarrego as linhas etc. Isso é 99% de os casos em que esse erro acontece.
Este é um cenário comum em que esse bug acontece: eu tenho um
UINavigationController
e ele tem umUITableView
, quando clico em uma linha ele empurra um novoUITableView
e assim por diante. Este erro sempre acontece comigo quando eu coloco o últimoUITableview
e volto para oUITableView
anterior, neste ponto eu faço uma chamada desnecessária para aloadIt
função que basicamente insere as linhas e relaods oUITableView
.A razão pela qual isso acontece é porque eu coloco erroneamente minha função loadIt em
viewDidAppear:animated
vez deviewDidLoad
.viewDidAppear:animated
é chamado sempre queUITableView
é exibido,viewDidLoad
é chamado apenas uma vez.fonte
Ao remover linhas, lembre-se de que ele também verifica as seções durante a atualização, em:
Se você quiser remover uma linha que é o último item em uma seção, você precisa remover a seção inteira (caso contrário, pode haver contagem de seção errada e gerar esta exceção).
fonte
Não se esqueça de atualizar seu array que determina numberOfRowsInSection. Ele precisa ser atualizado antes de você animar e remover
Verificamos se o número de linhas na seção é 1 porque teremos que deletar toda a seção.
Corrija-me se alguém puder tornar esta resposta mais clara.
fonte
Coloquei cada elemento de seção em matrizes separadas. Em seguida, coloque-os em outra matriz (arrayWithArray). Minha solução aqui para este problema:
fonte
Eu tive o mesmo erro.
Eu estava usando as seguintes linhas
para registrar a ponta no método viewDidLoad, pois eu tinha uma ponta diferente que também estava associada à mesma classe. Portanto, a linha
estava retornando nil, a menos que eu registrasse a ponta no viewDidLoad.
Meu problema é que esqueci de definir o identificador no inspetor de atributos para o meu arquivo "CustomNib.xib" e "CustomNib ~ iphone.xib". (Ou mais precisamente, que esqueci de pressionar Enter depois de digitar o identificador no inspetor de atributos no XCode, de forma que o novo nome falhou ao salvar.)
Espero que isto ajude.
fonte
Se você estiver usando um
NSFetchedResultsController
como eu e atualizando dados em um thread de segundo plano, não se esqueça de começar e terminar as atualizações no delegado:fonte
Tive o mesmo erro, que ao tentar
[tableView reloadData]
estava funcionando bem. O erro estava realmente na linhaQuando tentei verificar os valores de indexPath, eles não estavam corretos, conforme necessário.
Consertei alterando os valores em
indexPathsArray
.Espero que isto ajude .
fonte
Pode ser um dos
UITableViewDataSource
métodos de protocoloPara
deve retornar um inteiro igual à soma ou resultado de
-insertRowsAtIndexPaths:withRowAnimation:
e / ou-deleteRowsAtIndexPaths:withRowAnimation
:Para
deve retornar um inteiro igual à soma ou resultado de
-insertRowsAtIndexPaths:withRowAnimation:
e / ou-deleteSections:withRowAnimation:
fonte
Eu tive o mesmo problema com um banco de dados principal. Se estiver usando muitos FRC, você só precisa recarregar o tableview dentro de cada condição em numberOfSectionsInTableView.
fonte
Isso aconteceu comigo enquanto usava o Swift e um armazenamento de dados com suporte de FRC para gerenciar informações. Adicionar uma verificação simples à operação de exclusão para avaliar o indexPath.section atual me permitiu evitar uma chamada estranha. Acho que entendo por que esse problema ocorre ... Basicamente, eu carrego uma mensagem na linha superior sempre que meu conjunto de dados está vazio. Isso cria um problema fora por um, pois há uma linha falsa.
Minha Solução
fonte
Basta verificar se você chama [yourTableView reloadData]; depois de modificar a matriz de valores.
fonte