gpt4 book ai didi

ios - 同时添加核心数据输入和segue

转载 作者:行者123 更新时间:2023-12-01 19:12:09 28 4
gpt4 key购买 nike

在我的 tableView 中,导航栏上有一个按钮,用于添加新的核心数据条目。这工作正常,新条目被添加到核心数据和 tableView 的顶部。然后,如果我在 tableView 中选择条目(或任何条目),我就会有一个序列转换到一个新的 View Controller ,显示该核心数据项的详细信息。这也很好。

但我想更改添加条目的方式。我想在导航栏中按下相同的按钮,我仍然希望将新条目添加到表格中。但同时我想转换到详细 View Controller 并显示我刚刚创建的条目的刚刚创建的值。

正如您从下面的代码中看到的那样,查看游戏详细信息的序列只是抓取选定的行并将其传递给详细 View Controller 。在我的 prepareForAddGameDetailSegue 中,我试图通过将插入新条目的新创建条目的 indexPath 设置为 0 来作弊。这不起作用,我感觉这是因为我的 fetchedResultsController 在转换之前没有更新。

因此,当细节 View Controller 加载新创建的游戏的值时为空。但是如果我回到 tableView 然后选择刚刚插入新游戏的行,它会很好地转换并且细节都会显示出来。

任何人帮助我做错了哪一步?谢谢!

以下是 segue 处理程序:

- (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并返回新保存的游戏。
使用返回的对象来加载您的详细 View 。
稍后,在返回 segue 中,找到新插入对象的索引并选择它。
您可以使用:- (NSIndexPath *)indexPathForObject: FRC 的方法来获取 IndexPath。

关于ios - 同时添加核心数据输入和segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818249/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com