填充两个UITableViews

时间:2014-10-01 17:35:00

标签: ios objective-c iphone uitableview

好一点背景,这样你就可以得到我在这里想做的事情。会有几个问题所以请耐心等待。

我正在建立自己的iPhone应用程序,显示当天即将推出的游戏。您可以在下面的图片中看到结构。

enter image description here

让我们调用上面的表视图:“TableView1”,并将其称为“TableView2”。 截至目前,我正在从返回Json文本的网站填充TableView1的数据。

http://afternoon-springs-7986.herokuapp.com

以下是在GamesInfoViewController.m(通过Storyboard连接到TableView1的类)中执行此操作的代码

- (void) retrieveData{

    NSURL *url = [NSURL URLWithString:@"http://localhost:5000"];
    NSData *data = [NSData dataWithContentsOfURL:url];

    jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    GamesInfoArray = [[NSMutableArray alloc] init];





    for (int i= 0; i < jsonArray.count; i++)
    {
        NSString *gameTime = [[jsonArray objectAtIndex:i] objectForKey:@"time"];
        NSString *gameID = [[jsonArray objectAtIndex:i] objectForKey:@"identity"];
        NSString *homeTeam = [[jsonArray objectAtIndex:i] objectForKey:@"homeTeam"];
        NSString *homeScore = [[jsonArray objectAtIndex:i] objectForKey:@"homeScore"];
        NSString *awayTeam = [[jsonArray objectAtIndex:i] objectForKey:@"awayTeam"];
        NSString *awayScore = [[jsonArray objectAtIndex:i] objectForKey:@"awayScore"];

        [GamesInfoArray addObject:[[GameInfo alloc] initWithidentity:gameID andtime:gameTime andawayTeam:awayTeam andawayScore:awayScore andhomeTeam:homeTeam andhomeScore:homeScore]]; 
    }

    [self.tableView reloadData];
}

正如您所看到的,我将信息保存在名为GamesInfoArray的NSMutableArray中。现在,一些存储在GamesInfoArray中的对象将用于填充TableView2(我将使用if语句检查特定游戏是否已开始使用存储在每个对象中的时间值)

我认为最好的方法是使用上面的代码从Web服务器获取信息并将其放在处理该信息的新类中,然后将信息放在两个不同的NSMutableArrays中。我现在得到的那个和另一个填充TableView2。这样每个TableView都可以从正确的NSMutableArray中获取所需的信息。

这是TableView1的一个例子:

enter image description here

你看到的那个有一个绿色按钮意味着它的实时,这是一个将在TableView2中显示的对象的一个​​例子

由于它是我的第一个应用程序,我之前从未做过这样的事情,如果我正在思考或者我应该采取另一种方式,我会喜欢一些提示。

如果您需要任何额外的代码或信息,请告诉我并更新代码

1 个答案:

答案 0 :(得分:0)

由于TableView2依赖于GamesInfoViewController中的信息,因此创建一个单独的类来存储数据是有意义的。特别是因为如果在GamesInfoViewController中检索它,TableView2将拥有最新的数据。

我会创建两个类:一个获取数据的API客户端类,以及一个存储/缓存GameInfo对象数组的单例。我只会将GameInfo对象存储在单例上,并且如果需要,在数据源TableView2上有一个单独的数组(如果您显示完全相同的信息,除了只有实时游戏,您可以在两者之间共享相同的GameInfo数组)表)。 retrieveData方法也应该保留在每个视图控制器类中,以便您可以适当地响应连接/解析错误。