将数据从一个表插入另一个表

时间:2012-02-08 09:01:10

标签: iphone ios cocoa-touch uitableview

我有两个UITableViewController类,MainTableController和SubTableController。

从AppDelegate类我调用MainTableController类。

首先这个类是空的,并且在这个类中有一个名为“show list”的按钮。 当我点击这个按钮时,我将转到SubTableController,在那里我有一个表格形式的动作列表 现在,如果我选择第一个单元格动作,那么该动作名称必须出现在MainTableController中我的第一个表格单元格中。但是我无法在MainTableController类的表中打印该名称。

在SubTableController中:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{   
    ActionList * actionListObj = [appDelegate.actionArray objectAtIndex:indexPath.row];  
    self.chooseActions = actionListObj.actionName;
    MainTableController * mainViewController = [[MainTableController alloc] init];      
    [mainViewController getAction:self.chooseActions];
    [self.navigationController dismissModalViewControllerAnimated:YES];
}

在MainTableController中:

-(void) viewWillAppear:(BOOL)animated{
    [self reloadData];
}

-(void) reloadData{
    [self.myTableView reloadData];
}

-(void) getAction: (NSString *) actionChoose{        
    self.action = actionChoose;
    [self reloadData];
}       

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    // Configure the cell...
    cell.textLabel.text = self.action;
    return cell;
}

当我调试时,在MainTableController中我得到了getAction方法中的动作,但是在表格单元格中,文本字符串为空。

有人可以帮我解决这个问题吗?我哪里错了?

2 个答案:

答案 0 :(得分:1)

每次在SubTableController中选择单元格时,您都在分配和初始化新视图控制器

MainTableController * mainViewController = [[MainTableController alloc] init];

当然,它不是导航堆栈中的那个。

你需要让这两个控制器进行通信 我建议子视图控制器在主视图上定义一个属性,以便在需要时发送消息。

SubTableController中,添加一个属性并合成它:

@property(readwrite, assign) MainViewController *mainViewController;
// and ...
@synthesize mainViewController;

当然,当你按下子视图控制器时,不要忘记设置属性。

// in main view controller
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // alloc/init the sub VC
    subVCInstance.mainViewController = self;
    [self pushViewController:subVCInstance ......

现在,当在sub 1中选择一行时,向主要消息发送消息,而不使用alloc / init新的MainViewController对象:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{   
    ActionList * actionListObj = [appDelegate.actionArray objectAtIndex:indexPath.row];  
    self.chooseActions = actionListObj.actionName;
    //MainTableController * mainViewController = [[MainTableController alloc] init];      
    [self.mainViewController getAction:self.chooseActions];
    [self.navigationController dismissModalViewControllerAnimated:YES];
}

这应该可以正常工作。

答案 1 :(得分:1)

didSelectRowAtIndexPath课程的SubTableController中,您正在分配新的MainTableController来发送数据。

MainTableController * mainViewController = [[MainTableController alloc] init];      
[mainViewController getAction:self.chooseActions];

你不应该这样做。因为现有的主视图将与新分配的主视图不同。您应该使用delegate来回馈数据。有关协议和代理的更多信息,see here

More example here