2014-10-12 3 views
-1

부모 UIViewControllerNSArray을 서브 뷰 UIView으로 전달하는 간단한 작업에 문제가 있습니다. 여기 UIViewController에서 NSView를 서브 뷰로 전달

내가 내 하위 뷰 ( UIView의 서브 클래스)를 선언 ... 일부 코드입니다. 그런 다음 스토리 컨트롤러가 초기화 될 때보기 컨트롤러에서 내 배열을 내 하위보기로 전달합니다. 배열을 기록하고 콘솔 (null) 알려줍니다.

내가 내 스토리 보드 UIViewControllerUIView을 추가 한

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) 
    { 
     NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil]; 
     [_tableView setColumnTitles:array]; 
     NSLog(@"%@", _tableView.columnTitles); 
    } 
    return self; 
} 

ParentViewController.h

@property (nonatomic, strong) IBOutlet APColumnTableView *tableView; 

ParentViewController.m는, 서브 클래스를 설정하고 IBOutlet 연결. 당신이 볼 수있는 것처럼 나는 columnTitlesNSArray을 선언했다.

APColumnTableView.h (내 하위 뷰 서브 클래스)

@property (nonatomic, strong) NSArray *columnTitles; 

그런 다음하는 .m 파일에, 나는 콘솔이 (null) 여전히 뱉어 무엇을보고 다시 배열을 기록합니다.

APColumnTableView.m

-(void)awakeFromNib 
{ 
    //Intialisation here... 
    NSLog(@"%@", self.columnTitles); 
} 

는 어디에서 잘못 갈거야?! 난 그냥 내 UIViewController에서 NSArray을 하위 뷰로 전달하기 만하면됩니다.

+0

전혀 도움이 안되기 때문에 훌륭합니다. 나는 대답없이 이것을 보았다. 나는 데이터를 되돌려 보내지 않고 있는데, 사실상 모든 기존 답변들이 다루는 뷰 컨트롤러 사이에는 가지 않을 것이다. 제가 게시 한 코드를 보지 않고 제가 잘못하고있는 것을 말해 줄 수 있습니까? 기존 답변을 찾을 수 없으면 게시하지 않겠습니다. –

답변

2

아직 콘센트가 설정되지 않습니다. initWithCoder:입니다. 배열을 전달하려면 awakeFromNib 또는 viewDidLoad을 사용하십시오. _tableViewinitWithCoder:에 기록하면 아마 nil이 될 것입니다.

+0

아론의 대답은 정확합니다. (투표 됨). init 메소드에서 뷰 컨트롤러 뷰가 아직로드되지 않았습니다. viewDidLoad는 뷰를 처리하는 코드를 넣는 일반적인 장소입니다. –

+0

아! 'viewDidLoad'에 넣지 않은 이유는 배열이 거기에서 설정 될 때까지 내 하위 뷰의 awakeFromNib가 이미 호출 되었기 때문입니다.그렇다면 어떻게 부모로부터 배열을 설정할 수 있는지 확인한 다음, 서브 뷰에서 초기화가 일어 났는가? –

+0

테이블 뷰 하위 클래스에서 한 가지 방법은 setter를 재정의 한 다음 데이터가 설정되면 테이블 뷰를 다시로드하는 것입니다. 따라서 메소드가 호출되는 순서에 의존하지 않아도됩니다. 나는 xib 파일이나 스토리 보드를 사용하지 않았기 때문에'awakeFromNib'와 같은 것에 너무 익숙하지 않아서 아마 다른 누군가가 더 나은 대답을 할 수있을 것입니다. –

0

ParentViewController에 대해 initWithCoder가 호출 될 때 _tableView가 이미 존재한다는 보장 할 수 없습니다. 다른 말로하면, awakeFromNib에서만 모든 뷰가 존재하고 있는지를 확인할 수 있습니다.

그래서 initWithCoder에서 ParentViewController 내의 awakeFromNib로 코드를 옮기면 모든 것이 잘되어야합니다.

0

저는 initWithCoder에서 뷰가 아직 생성되지 않았으므로 (_tableView가 nil이기 때문에). viewDidLoad에서 해보십시오.

관련 문제