2011-01-26 2 views
0

Итак, у меня есть tableView и подробный вид. У меня есть дополнительная строка в моей таблицеView для добавления записи. Когда я нажимаю на новую кнопку, я отправляю объект nil в мой подробный вид, который является тем же, что я использую для редактирования существующей строки. Я использую следующий код для этого:Добавить строку в TableView из подробного представления

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    new = NO; 
    NSUInteger row = [indexPath row]; 
    SavedCarDetailController *detailController = [[SavedCarDetailController alloc] initWithNibName:@"SavedCarDetailController" bundle:nil]; 
    if(indexPath.row >= [listOfCars count]){ 
     NSLog(@"New Car"); 
     detailController.car = nil; 
     new = YES; 
    } else { 
     new = NO; 
     detailController.car = [listOfCars objectAtIndex:row]; 
    } 
    detailController.managedObjectContext = self.managedObjectContext; 
    [self.navigationController pushViewController:detailController animated:YES]; 
    [detailController release]; 
} 

Когда я сохранить материал ядра данных я выполнить это в моем detailController

- (void)viewWillDisappear:(BOOL)animated { 
    NSError * e = nil; 
    if(self.New){ 
     NSLog(@"New Car Saving"); 
     NSManagedObject * obj = [NSEntityDescription insertNewObjectForEntityForName:@"Cars" inManagedObjectContext: managedObjectContext]; 
     [obj setValue:Name.text forKey:@"name"]; 
     [obj setValue:Year.text forKey:@"Year"]; 
     [obj setValue:Notes.text forKey:@"Notes"]; 

    } else { 
     NSLog(@"Updating exiting car"); 
     car.Name = Name.text; 
     car.Year = Year.text; 
     car.Notes = Notes.text; 
} 
    [managedObjectContext save:&e]; 
    if(e){ 
     NSLog(@"Error occurred, %@", e); 
    } 
    if(self.New){ 

    } else { 
    // [self.parentViewController.tableView reloadData]; 

    } 
} 

Затем я обновляю свой Tableview с reloadData, но это только обновляет модифицированный Фейлд

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    if(new){ 
     NSInteger row = [listOfCars count]; 
     NSLog(@" row %i", row); 
     NSArray *paths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:row inSection:0]]; 
     //NSArray * foo = [NSArray arrayWithArray:<#(NSArray *)array#> 
     [self.tableView beginUpdates]; 
     [self.tableView insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationFade]; 
     [self.tableView endUpdates]; 
     new = NO; 
    } 
    //This only works with "changed data" not new rows. 
    [self.tableView reloadData]; 


} 

Это сохраняет новые строки в моей базе данных, но новая строка никогда не появляется. На самом деле, InsertRows на самом деле coreDumps. Я уверен, что мне нужно использовать insertRowsAtIndexPaths, но я не знаю, куда его поместить, поэтому он будет выполнен, как только я добавлю объект в CoreData. Есть идеи?

ответ

0

Вы забыли вставить вновь созданный автомобиль в массив listOfCars.

+0

Я думал, что объект Car находится в подробном представлении, и я не передаю его родительскому. Знаете ли вы, как я могу добавить этот автомобиль в listOfCars из представления Detail обратно в его parentView? –

+0

Я бы создал новый объект автомобиля и добавил его в массив в файле didSelectRowAtIndexPath (с некоторыми значениями по умолчанию), а затем передал его контроллеру подробного представления. – Felix

Смежные вопросы