0
したがって、私は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];
}
は、私は私のコアデータのものを保存すると、私は
- (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];
}
}
その後、私はreloadDataと私のtableViewを更新し、私のdetailControllerでこれを実行するが、それは唯一の修正フェイルドを更新
- (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は実際に私のコアダンプです。私はかなり私がinsertRowsAtIndexPathsを使用する必要があると確信していますが、私はCoreDataにオブジェクトを追加した後に実行されるようにどこに手掛かりがありません。何か案は?
私は考えていましたが、Carオブジェクトは詳細ビューにあり、私はそれを親に戻しません。あなたはその車をlistOfCarsにDetailビューからそのparentViewにどのように追加できるのか知っていますか? –
私は新しい車のオブジェクトを作成し、didSelectRowAtIndexPath(いくつかのデフォルト値を持つ)の配列にそれを追加して、それを詳細ビューコントローラに渡します。 – Felix