Error, datos del núcleo, razón: '*** – : índice (2) más allá de los límites (2)'

Hola, soy casi nuevo en progtwigción. Me encuentro con un error que no pude resolver de todos modos. Incluso después de comparar con otras soluciones. He trabajado en esto por cerca de 3 días.

Entonces permítame describir completamente mi problema:

1.esto es mi código de implementación:

#import "DocumentTableViewController.h" #import "AddDocumentTableView.h" #import "DB_document.h" @implementation DocumentTableViewController @synthesize managedObjectContext; @synthesize btnAddDocument; @synthesize fetchedObjects; - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { // Custom initialization } return self; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; NSManagedObjectContext *context = managedObjectContext; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"DB_document" inManagedObjectContext:context]; [fetchRequest setEntity:entity]; NSError *error; fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; NSLog(@"%d",[fetchedObjects count]); } - (void)viewDidUnload { [self setBtnAddDocument:nil]; [super viewDidUnload]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { int result = 0; if (section == 0) { result = [fetchedObjects count] + 1; } else if (section == 1) { result = 1; } return result; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 40; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } DB_document *db_document = [fetchedObjects objectAtIndex:indexPath.row]; if (indexPath.section == 0 && indexPath.row == 0) { UILabel *lblMoney = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 70, 40)]; lblMoney.text = @"amount"; lblMoney.textAlignment = UITextAlignmentCenter; lblMoney.textColor = [UIColor blackColor]; lblMoney.backgroundColor = [UIColor clearColor]; lblMoney.font = [UIFont systemFontOfSize:12]; [cell addSubview:lblMoney]; UILabel *lblDescription = [[UILabel alloc] initWithFrame:CGRectMake(85, 0, 150, 40)]; lblDescription.text = @"description"; lblDescription.textAlignment = UITextAlignmentCenter; lblDescription.textColor = [UIColor blackColor]; lblDescription.backgroundColor = [UIColor clearColor]; lblDescription.font = [UIFont systemFontOfSize:12]; [cell addSubview:lblDescription]; UILabel *lblDate = [[UILabel alloc] initWithFrame:CGRectMake(240, 0, 70, 40)]; lblDate.text = @"date"; lblDate.textAlignment = UITextAlignmentCenter; lblDate.textColor = [UIColor blackColor]; lblDate.backgroundColor = [UIColor clearColor]; lblDate.font = [UIFont systemFontOfSize:12]; [cell addSubview:lblDate]; UIButton *btnLine1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btnLine1.frame = CGRectMake(80, 0, 1, 40); [cell addSubview:btnLine1]; UIButton *btnLine2 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btnLine2.frame = CGRectMake(240, 0, 1, 40); [cell addSubview:btnLine2]; return cell; } if (indexPath.section == 0 && indexPath.row != 0) { UILabel *lblMoney = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 70, 40)]; lblMoney.text = [NSString stringWithFormat:@"%d",db_document.docAmount]; lblMoney.textAlignment = UITextAlignmentCenter; lblMoney.textColor = [UIColor blackColor]; lblMoney.backgroundColor = [UIColor clearColor]; lblMoney.font = [UIFont systemFontOfSize:12]; [cell addSubview:lblMoney]; UILabel *lblDescription = [[UILabel alloc] initWithFrame:CGRectMake(85, 0, 150, 40)]; lblDescription.text = db_document.docDescription; lblDescription.numberOfLines = 2; lblDescription.textAlignment = UITextAlignmentCenter; lblDescription.textColor = [UIColor blackColor]; lblDescription.backgroundColor = [UIColor clearColor]; lblDescription.font = [UIFont systemFontOfSize:12]; [cell addSubview:lblDescription]; UILabel *lblDate = [[UILabel alloc] initWithFrame:CGRectMake(240, 0, 70, 40)]; NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; [dateFormater setDateFormat:@"yyyy/mm/dd"]; lblDate.text = [NSString stringWithFormat:@"%@",[dateFormater stringFromDate:(NSDate *)db_document.docDate]]; lblDate.textAlignment = UITextAlignmentCenter; lblDate.textColor = [UIColor blackColor]; lblDate.backgroundColor = [UIColor clearColor]; lblDate.font = [UIFont systemFontOfSize:12]; [cell addSubview:lblDate]; UIButton *btnLine1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btnLine1.frame = CGRectMake(80, 0, 1, 40); [cell addSubview:btnLine1]; UIButton *btnLine2 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btnLine2.frame = CGRectMake(240, 0, 1, 40); [cell addSubview:btnLine2]; return cell; } if (indexPath.section == 1) { UILabel *lblMoney = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 70, 40)]; lblMoney.text = @""; lblMoney.textAlignment = UITextAlignmentCenter; lblMoney.textColor = [UIColor blackColor]; lblMoney.backgroundColor = [UIColor clearColor]; lblMoney.font = [UIFont systemFontOfSize:12]; [cell addSubview:lblMoney]; UILabel *lblTotalAmount = [[UILabel alloc] initWithFrame:CGRectMake(165, 0, 140, 40)]; lblTotalAmount.text = @"amounts"; lblTotalAmount.textAlignment = UITextAlignmentCenter; lblTotalAmount.textColor = [UIColor blackColor]; lblTotalAmount.backgroundColor = [UIColor clearColor]; lblTotalAmount.font = [UIFont systemFontOfSize:12]; [cell addSubview:lblTotalAmount]; UIButton *btnLine = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btnLine.frame = CGRectMake(160, 0, 1, 40); [cell addSubview:btnLine]; return cell; } return cell; } - (IBAction)btnAddDocument_click:(id)sender { AddDocumentTableView *addDocumentTableView = [[AddDocumentTableView alloc] init]; addDocumentTableView.managedObjectContext = managedObjectContext; [self.navigationController pushViewController:addDocumentTableView animated:YES]; } 

2. este es el error:

2012-06-16 15: 25: 31.696 Account5 [5534: fb03] 2 2012-06-16 15: 25: 31.704 Account5 [5534: fb03] * Aplicación de finalización debido a una exception no detectada 'NSRangeException', motivo: '* – [ _PFArray objectAtIndex:]: índice (2) más allá de los límites (2) '*** Pila de llamadas de primer lanzamiento:

3. Déjame describir el progtwig. Puedo save datos en la database con los datos básicos, pero cuando quiero get el progtwig de datos salta. Tengo que considerar que creo que los datos capturados de NSManagedObjectContext porque fetchedObjects Array tienen 2 datos porque los inserté y debo decir que mi RootViewController es DocumentTableViewController, significa que exactamente cuando ejecuto el progtwig se bloquea. Y si deseo ejecutar la aplicación, debo comentar DB_document *db_document = [fetchedObjects objectAtIndex:indexPath.row];

y después de que la aplicación se ejecuta y puedo insert datos en otra página. Debo tener en count que cuando la aplicación falla, se detiene exactamente en

DB_document *db_document = [fetchedObjects objectAtIndex:indexPath.row];

con línea resaltada en verde. gracias

Este es tu problema:

En numberOfRowsInSection , agrega una a la matriz fetchedResults . Presumiblemente, desea agregar una fila adicional en esa sección. Eso está bien.

Sin embargo, en cellForRowAtIndexPath , tomas indexPath.row como el índice para tu db_document . Obviamente, en la última fila se bloqueará. Primero debe verificar en qué fila se encuentra y luego recuperar su db_document solo si lo necesita para esa fila en particular.

El problema está aquí:

 result = [fetchedObjects count] + 1; 

en numberOfRowsInSection, agrega una fila más que el recuento fetchedObjects y cuando en el cellForRowAtIndexPath, fetchedObjects tiene, por ejemplo, 3 filas y obtiene la fila 4, y esta exception se produce y sale fuera del scope en esta matriz.