数据源和表视图的麻烦

时间:2013-06-10 12:53:13

标签: iphone ios objective-c uitableview

我有UIViewControllertableviews

1-主tableview,显示在整个view controller

2-第二个viewcontroller,加载在popup view

点击tableviewcell时会显示第二个tableview

根据cell被刷过的内容,popup view中有不同的数据。

我已经在viewdidload方法中加载了整个数据并将所有内容存储在nsmutablearray中,因此可以加载。

我的问题是我不知道如何使用tableview的{​​{1}},在我的项目中我将DataSource的数据源链接到tableview,但是通过这种方式,它会从主视图加载file's owner,并且不会采用具有第二个numberofrows的正确计数。

因此,如果在主tableview中我有例如3个元素,而在第二个tableview中它应该加载5个元素,它会给我一个错误,(tableview)。< / p>

我认为我应该将'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index…tableviews联系起来,即使我真的不知道。

我希望明确,如果您需要更多信息或更好的描述,请问我,我会为您做。

6 个答案:

答案 0 :(得分:2)

在委托方法中,您应该比较tableview。

参见示例

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if(tableView == maintableView)
          return VALUE_FOR_MAIN_TABLE_DATA;
    else  
          return VALUE_FOR_POP_TABLE_DATA;  
}

答案 1 :(得分:0)

没问题

你只需在桌子上设置标签。

[tableView1 setTag:1];
[tableView2 setTag:2];

然后

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

     if (tableView.tag == 1) {
        return 4;
     }
     else if (tableView.tag == 2)
     {
        return 5;
     }
}

做类似的事情所有的数据源方法

答案 2 :(得分:0)

您可以将一个View Controller用作多个表视图的唯一数据源,但是您需要使用tableView方法的UITableViewDataSource参数来检查哪个表视图正在请求数据。 / p>

例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.mainTableView)
    {
        // code for your main table view
    }
    else
    {
        // code for your popup table view
    }
}

答案 3 :(得分:0)

作为两个表的数据源/委托的视图控制器的相同实例在技术上是可行的,但具有许多陷阱。其中一个是:self.view参考两个表中的哪一个?

但是,大多数数据源协议都会删除对表的引用。您可以使用该重新引用来确定哪个表实际发送请求。但并非该协议的所有方法都包含对该表的引用。这就是它开始变得棘手的地方。

最好使用两个独特的视图控制器,每个控制台一个。在它们之间建立协议,以便主视图控制器可以将数据传递给弹出窗口中的数据,以便弹出窗口可以使用适当的数据自行初始化/加载它,并且可以在数据更改时刷新其视图。

答案 4 :(得分:0)

您需要在所有委托和数据源方法中检查tableview,如下所示:

if (tableView == mainTable)
{
    // code for your main table
}
else if (tableView == popupTable)
{
    // code for your popup table
}

您对2个或更多表视图执行相同操作。 希望这会有所帮助。

答案 5 :(得分:0)

你可以两种方式做到:

  1. 将单独的类作为单独表的数据源。将对象实例化为表的数据源,并在适当的视图控制器中以viewDidLoad方法绑定它们。

  2. 为2个表创建一个数据源,我不建议这样做,因为它不符合正确的OOAD。你会在视图控制器和桌面之间以这种方式进行紧密耦合,这可能会在不久的将来引起麻烦。

  3. 您有方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    ,您可以在其中区分您所指的表格:

    if (tableView == mainTableView) {
         // initialize cell for main table view
    }
    if (tableView == secondTableView) {
        // intialize cell for second table view
    }