Добавить строку в TableView из подробного представления - PullRequest
0 голосов
/ 26 января 2011

Итак, у меня есть tableView и подробный вид.У меня есть дополнительная строка в моем 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.Есть идеи?

1 Ответ

0 голосов
/ 26 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...