gpt4 book ai didi

ios - 使用 RestKit 和 JSON 填充多个 UITable ViewController(第二个表是崩溃的应用程序)

转载 作者:行者123 更新时间:2023-11-28 22:41:33 24 4
gpt4 key购买 nike

我正在使用网站 API 来填充我的 tableView,使用 Restkit 和 JSON 将请求/接收/解析数据放入我的模型中。已经设置了看起来运行良好的模型和映射。

问题是在加载 Section & Row 的初始 TableView 之后,我需要第二个 tableView 使用从 tableView 选择的单元格/行,以显示与在第二个 tableView 中选择的特定联赛相关联的团队。

我相信这是...

  • (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

我没有或没有正确的,因为它是:

在初始屏幕中正确填充数据:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return sports.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
Sport *sport = [sports objectAtIndex:section];
return sport.leagues.count;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
Sport *sport = [sports objectAtIndex:section];
return sport.name;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"standardCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Sport *sport = [sports objectAtIndex:indexPath.section];
League *league = [sport.leagues objectAtIndex:indexPath.row];
cell.textLabel.text = league.name;

return cell;
}

但是如果我选择一个单元格,第二个 ViewController 是一个空白的 tableView(注意:之前的 ViewController tableView 代码中没有 prepareForSegue 或 didSelectRowAtIndexPath 代码,所以我认为这就是我可能得到这个空白 tableview 的原因):

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return leagues.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
League *league = [leagues objectAtIndex:section];
return league.teams.count;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
League *league = [leagues objectAtIndex:section];
return league.name;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"standardCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

League *league = [leagues objectAtIndex:indexPath.section];
Team *team = [league.teams objectAtIndex:indexPath.row];
cell.textLabel.text = team.name;

return cell;
}

或者如果我在之前的 ViewController 中添加 prepareForSegue 和 didSelectRowAtIndexPath 代码,选择一个将我们移动到下一个 ViewController 的单元格,应用程序崩溃(prepareForSegue 和 didSelectRowAtIndexPath 代码肯定不正确,我只是想拼凑一些东西,即使我做的至少有一部分是错误的):

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
TeamsViewController *teamsViewController = [[TeamsViewController alloc] initWithNibName:@"TeamsViewController" bundle:nil];
teamsViewController.title = [[sports objectAtIndex:indexPath.row] objectForKey:@"sports"];

}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"leagueDetail"]) {
TeamsViewController *tvc = [segue destinationViewController];
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
tvc.data = [self.navigationController objectInListAtIndex:indexPath.row]
}

我认为我遇到的是需要选定的单元格以某种方式将其信息传递到下一个 tableView,我不知道它是否需要以某种方式将该信息附加到 baseURL 我是从该选定行检索数据,然后以某种方式在团队 tableView 中显示数据。但我不确定这是否是问题所在,和/或具体如何实现。

非常感谢任何帮助,如果需要更多代码/详细信息,请告诉我,我很乐意为任何人快速获取它们。

编辑:这是我更新的 prepareForSegue 代码,但仍然有错误-错误:在“TeamsViewController”类型的对象上找不到属性“leagues”

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"leagueDetail"]) {

// note that "sender" will be the tableView cell that was selected
UITableViewCell *cell = (UITableViewCell*)sender;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

TeamsViewController *tvc = (TeamsViewController *)[segue destinationViewController];
tvc.leagues = [leagues objectAtIndex:indexPath.section];
}
}

最佳答案

您需要将 Storyboard 中的 Prototype Row 与下一个 View Controller 链接起来,命名 segue 并使用 prepareForSegue 传递必要的数据。不需要 didSelectRow...

要引用该行,请使用

[self.tableView indexPathForCell:(UITableViewCell*)sender]

(我不会依赖行的选定状态。您会混合 View 和模型域,这违反了 MVC 原则。)

另外,我注意到了一个特定的逻辑错误。如果在 VC2 中你想在表格 View 行中将联赛显示为部分和球队,你真的应该选择 Sport 而不是联赛。一个联赛不会有很多联赛吧?

关于ios - 使用 RestKit 和 JSON 填充多个 UITable ViewController(第二个表是崩溃的应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392860/

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