自定义初始化方法无效

时间:2013-12-19 19:58:40

标签: ios objective-c uitableview storyboard

我试图通过单击一个单元格在UITableViewController中填充UITextFields。所以,我创建了一个init方法,如:

- (id)initWithObjetoFormulario:(ObjetoFormularioGerenciador *)umObjeto
{
    self = [super init];
    if(self){
        self.objetoFormulario = umObjeto;
            }
    return self;
}

在我的ViewDidLoad中,我将行if(self.objetoFormulario){放在后面,然后将UITextFields链接到我的对象。我认为此时没有任何错误。

所以,我的第二个TableViewController是一个SearchDisplayController,它找到了我需要的数据,我在didSelectRowAtIndexPath找到了:

ObjetoFormularioGerenciador *objeto = [[ObjetoFormularioGerenciador alloc] init];
    [objeto RecebeArrayComDadosECriaObjetoFormularioGerenciador:_arrayComDados eEmail:  [searchResults objectAtIndex:indexPath.row]];

   GerenciarSeriesTableViewController *gerenciador = [[GerenciarSeriesTableViewController  alloc] initWithObjetoFormulario:objeto];
    [self.navigationController pushViewController:gerenciador animated:NO];

由于我的单元格中没有实际对象,因此我调用一个方法来根据单元格条目检索对象,这也是有效的,现在,当我单击单元格时,它会打开一个空白的TableView。它应该返回到包含UITextFields的静态单元格的tableView并填充它们。

当我使用此代码时:

ObjetoFormularioGerenciador *objeto = [[ObjetoFormularioGerenciador alloc] init];
[objeto RecebeArrayComDadosECriaObjetoFormularioGerenciador:_arrayComDados eEmail:[searchResults objectAtIndex:indexPath.row]];

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
GerenciarSeriesTableViewController *gerenciador = [sb instantiateViewControllerWithIdentifier:@"GerenciarSeriesTableViewController"];
[self.navigationController pushViewController:gerenciador animated:NO];

它确实打开了我想要的TableView,但它没有填充UITextFields,因为我没有传递任何对象。

感谢。

1 个答案:

答案 0 :(得分:3)

是的,对于视图控制器,你实际上通常没有自定义init方法,而是依赖于标准控制器,然后在实例化视图控制器后,你只需设置属性,例如:

ObjetoFormularioGerenciador *objeto = ... // create and configure objeto

GerenciarSeriesTableViewController *gerenciador = [self.storyboard instantiateViewControllerWithIdentifier:@"GerenciarSeriesTableViewController"];
gerenciador.objetoFormulario = objeto;
[self.navigationController pushViewController:gerenciador animated:NO];

您还可以在两个视图控制器之间使用segue,为其指定标识符,然后调用[self performSegueWithIdentifier:...],然后在objetoFormulario方法中设置prepareForSegue。但是上述技术也应该可以正常工作。

相关问题