Ios 同时增加核心数据录入和segue
在我的tableView中,导航栏上有一个按钮,用于添加新的核心数据条目。这很好,新条目被添加到核心数据和tableView的顶部。然后,如果我在tableView中选择条目(或任何条目),我会有一个序列,它会转换到一个新的视图控制器,显示该核心数据项的详细信息。那也行 但是我想改变我添加条目的方式。我想按导航栏上的相同按钮,但我仍然希望将新条目添加到表中。但同时,我想转换到“细节视图”控制器,并显示刚刚创建的条目值 正如您从下面的代码中所看到的,sequeto view game details只需抓取选中的行并将其传递给detail view控制器。在我的prepareForAddGameDetailSegue中,我试图通过将插入新条目的新创建条目的indexPath设置为0来作弊。这不起作用,我感觉这是因为我的fetchedResultsController在转换之前没有更新 因此,当细节视图控制器为新创建的游戏加载值时,该值为空。但是,如果我返回到tableView,然后选择新游戏刚刚插入的那一行,它会很好地过渡,细节都会显示出来 有人帮我做错事吗?谢谢 以下是segue处理程序:Ios 同时增加核心数据录入和segue,ios,core-data,uistoryboardsegue,Ios,Core Data,Uistoryboardsegue,在我的tableView中,导航栏上有一个按钮,用于添加新的核心数据条目。这很好,新条目被添加到核心数据和tableView的顶部。然后,如果我在tableView中选择条目(或任何条目),我会有一个序列,它会转换到一个新的视图控制器,显示该核心数据项的详细信息。那也行 但是我想改变我添加条目的方式。我想按导航栏上的相同按钮,但我仍然希望将新条目添加到表中。但同时,我想转换到“细节视图”控制器,并显示刚刚创建的条目值 正如您从下面的代码中所看到的,sequeto view game detail
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showGameDetails"]) {
[self prepareForGameDetailSegue:(UIStoryboardSegue *)segue sender:(id)sender];
return;
}
if ([[segue identifier] isEqualToString:@"addGameDetails"]) {
[self prepareForAddGameDetailSegue:(UIStoryboardSegue *)segue sender:(id)sender];
return;
}
}
- (void)prepareForGameDetailSegue:(UIStoryboardSegue*)segue sender:(id)sender {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Game *SelectedGame = (Game *)[[self fetchedResultsController] objectAtIndexPath:indexPath];
//pass the selected game to the new view controller
GameDetailViewController *detailViewController = (GameDetailViewController *)[segue destinationViewController];
detailViewController.title = [NSString stringWithFormat:@"Game Details"];
detailViewController.game = SelectedGame;
[detailViewController updateInterface];
}
- (void)prepareForAddGameDetailSegue:(UIStoryboardSegue*)segue sender:(id)sender {
[self addGame];
Game *newGame = (Game *)[[self fetchedResultsController] objectAtIndexPath:0];
GameDetailViewController *detailViewController = (GameDetailViewController *)[segue destinationViewController];
detailViewController.title = [NSString stringWithFormat:@"New Game"];
detailViewController.game = newGame;
[detailViewController updateInterface];
}
以下是addGame方法:
-(void)addGame {
Game *newGame = (Game *)[NSEntityDescription insertNewObjectForEntityForName:@"Game"
inManagedObjectContext:_managedObjectContext];
NSDate *today = [NSDate date];
newGame.gameDate = today;
newGame.points = 600;
newGame.seconds = [NSNumber numberWithInt:10];
NSError *error = nil;
if (![_managedObjectContext save:&error]) {
NSLog(@"Error in adding a new game %@, %@", error, [error userInfo]);
abort();
}
}
将
-(void)addGame
的签名更改为-(Game*)addGame
,并返回新保存的游戏。
使用返回的对象加载详细信息视图。稍后,在返回序列中,找到新插入对象的索引并选择它。
您可以使用FRC的:
-(nsindepath*)indexPathForObject:
方法来获取indepath。Nice!您是正确的,只需从addGame方法返回newGame即可。然后我只是用detailViewController.game=[self addGame]传递了它代码>不需要获取它的索引XPath。