2013-12-19 2 views
2

셀 클릭만으로 UITableViewController 내부에 UITextFields를 채우려고합니다. 내 객체에 UITextFields를 줄 if(self.objetoFormulario){을 넣고 링크 후 내 ViewDidLoad에서사용자 정의 Init 메서드가 작동하지 않습니다.

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

: 그래서, 내가 좋아하는 init 메소드를 만들었습니다. 나는이 시점에서 잘못된 것이 있다고 생각하지 않는다.

그래서, 내 두 번째 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를 채우지 않습니다.

감사합니다.

+0

'RecebeArrayComDadosECriaObjetoFormularioGerenciador : eEmail' 최악의 메소드 이름. – Sulthan

+0

고마워. :) 내가 그렇게 할 때 내가하고있는 일을 추적하는 것이 더 쉽다. – Jorge

답변

3

예, 일반적으로보기 컨트롤러에 대한 사용자 지정 init 메서드를 사용하지 않고 표준 컨트롤러에 대한 메서드를 사용하고 나면보기 컨트롤러가 인스턴스화 된 후에 속성을 설정합니다 (예 :

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

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

또한, 두 개의 뷰 컨트롤러 사이에 SEGUE이 그것을 식별자를 제공하고 prepareForSegue 방법에 objetoFormulario을 설정 한 후 [self performSegueWithIdentifier:...]를 호출 할 수 있습니다. 그러나 위의 기술은 잘 작동해야합니다.

+0

완벽합니다. 잘 작동합니다. 커스텀 init 메소드에 대해서 자주 사용되는 것은 아닌가? 그냥 궁금해서. 감사. – Jorge

+0

@Jorge NIB 기반 프로젝트에서 사용자 정의'init' 메소드 (표준'initWithNibName : bundle :')를 사용할 수 있습니다. 하지만 스토리 보드 세계에서는 스토리 보드 나 Segue가 뷰 컨트롤러와 하위 뷰를 인스턴스화하게하므로 커스텀'init' 메소드를 사용하는 것은 의미가 없습니다. 그러나 iOS 5에서는 표준'initWithCoder'를 사용할 수 있도록'prepareForSegue'가 도입되었지만 대상 컨트롤러에 데이터를 전달하는 메커니즘을 제공합니다. 따라서 스토리 보드에서는 일반적으로 뷰 컨트롤러 (또는 UIKit 하위 클래스 중 하나)에서 사용자 정의'init' 메서드를 사용하지 않습니다. – Rob

관련 문제