Con suerte, esto será una solución rápida. He estado tratando de averiguar el error que sigo recibiendo. El error se enumera a continuación y la appdelagate está debajo.
Se agradece cualquier ayuda.
Gracias
2012-04-12 21: 11: 52.669 Chanda [75100: f803] --- Error de afirmación en
-[UITableView _endCellAnimationsWithContext:]
,/SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:1037
2012-04-12 21: 11: 52.671 Chanda [75100: f803] --- Finalizando la aplicación debido a una excepción no detectada 'NSInternalInconsistencyException
' , motivo: 'Actualización no válida: número de filas no válido en la sección 0. El número de filas contenidas en una sección existente después de la actualización (2) debe ser igual al número de filas contenidas en esa sección antes de la actualización (2), más o menos el número de filas insertadas o eliminadas de esa sección (1 insertada, 0 eliminada) y más o menos el número de filas movidas dentro o fuera de esa sección (0 movidas hacia adentro, 0 movidas hacia afuera). '
#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
fuente
Respuestas:
No veo la razón para que nos muestre esta parte del código. Su error debe estar conectado a esta parte en su código, supongo
Probablemente esté cometiendo un error en uno de estos métodos de fuente de datos. Actualmente es imposible decir qué es exactamente lo que está mal, pero supongo que podría ser algo como: le está diciendo a la vista de tabla en el
numberOfRowsInSection
que le gustaría tener n filas reservadas y configuradas y en elcellForRowAtIndexPath
que solo maneja n - 1 filas, por ejemplo.Lamento que esta respuesta no pueda ser tan precisa como debería ser. Si nos muestra la implementación de su fuente de datos, sería mucho más fácil saber qué está pasando.
fuente
Como dijo Sun Tzu : es mejor ganar sin pelear . En mi caso, cada vez que veo este tipo de mensaje de error (es decir, discrepancia entre las filas agregadas eliminadas, etc.). Ni siquiera depuro nada ... Simplemente evito hacer esa llamada adicional donde recargo las filas, etc. eso es el 99% de los casos en los que ocurre este error.
Este es un escenario común en el que ocurre este error: tengo un
UINavigationController
y tiene unUITableView
, cuando hago clic en una fila, empuja una nuevaUITableView
y así sucesivamente. Este error siempre me sucede cuando abro el últimoUITableview
y vuelvo alUITableView
anterior, en este punto hago una llamada innecesaria a laloadIt
función que básicamente inserta las filas y reenvía el archivoUITableView
.La razón por la que esto sucede es porque coloco erróneamente mi función loadIt en en
viewDidAppear:animated
lugar deviewDidLoad
.viewDidAppear:animated
se llama cada vez queUITableView
se muestra,viewDidLoad
solo se llama una vez.fuente
Al eliminar filas, recuerde que también verifica las secciones al actualizar, en:
Si desea eliminar una fila que es el último elemento de una sección, debe eliminar toda la sección en su lugar (de lo contrario, es posible que el recuento de secciones sea incorrecto y arroje esta excepción).
fuente
No olvide actualizar su matriz que determina numberOfRowsInSection. Debe actualizarse antes de animar y eliminar
Comprobamos si el número de filas en la sección es 1 porque tendremos que eliminar toda la sección.
Corríjame si alguien puede aclarar esta respuesta.
fuente
Pongo los elementos de cada sección en matrices separadas. Luego, colóquelos en otra matriz (arrayWithArray). Mi solución aquí para este problema:
fuente
Yo tenía el mismo error.
Estaba usando las siguientes líneas
para registrar la punta en el método viewDidLoad, ya que tenía una punta diferente que también estaba asociada con la misma clase. Por lo tanto, la línea
devolvía nulo a menos que registrara la punta en viewDidLoad.
Mi problema fue que olvidé establecer el identificador en el inspector de atributos para mi archivo "CustomNib.xib" y "CustomNib ~ iphone.xib". (O más precisamente, que olvidé presionar enter después de escribir el identificador en el inspector de atributos en XCode, por lo que el nuevo nombre no se pudo guardar).
Espero que esto ayude.
fuente
Si está usando un
NSFetchedResultsController
me gusta y está actualizando datos en un hilo en segundo plano, no olvide comenzar y finalizar las actualizaciones en el delegado:fuente
Tuve el mismo error, que al intentarlo
[tableView reloadData]
funcionaba bien. El error estaba realmente en la líneaCuando intenté verificar los valores de indexPath, no eran correctos como se requería.
Lo arreglé cambiando los valores en
indexPathsArray
.Espero que esto ayude .
fuente
Podría ser uno de los
UITableViewDataSource
métodos de protocolopor
debe devolver un número entero igual a la suma o resultado de
-insertRowsAtIndexPaths:withRowAnimation:
y / o-deleteRowsAtIndexPaths:withRowAnimation
:por
debe devolver un número entero igual a la suma o resultado de
-insertRowsAtIndexPaths:withRowAnimation:
y / o-deleteSections:withRowAnimation:
fuente
Tuve el mismo problema con una base de datos principal. Si usa muchos FRC, solo necesita volver a cargar la vista de tabla dentro de cada condición en numberOfSectionsInTableView.
fuente
Me acaba de pasar esto mientras usaba Swift y un almacén de datos respaldado por FRC para administrar la información. Agregar una simple verificación a la operación de eliminación para evaluar la indexPath.section actual me permitió evitar una llamada extraña. Creo que entiendo por qué ocurre este problema ... Básicamente, cargo un mensaje en la fila superior siempre que mi conjunto de datos está vacío. Esto crea un problema de apagado por un problema, ya que hay una fila falsa.
Mi solución
fuente
Simplemente verifique que llame a [yourTableView reloadData]; después de modificar la matriz de valores.
fuente