2011-03-17 4 views
1

기본적으로 nib 파일을 사용하고 컨트롤러를 여러 번 만들 계획 인보기의 템플릿으로 사용하고 싶습니다. 이 펜촉에는 두 개의 라벨과 사용자 정의보기가 있습니다. 개념은 객체의 배열을 반복하고 각각에 대해이 컨트롤러의 인스턴스를 만들고 배열의 객체의 속성으로 속성을 설정한다는 것입니다.여러 개의보기 컨트롤러가있는 동일한 NIB 사용

이 모든 것은 현재 한 가지를 제외하고는 멋지게 작동합니다. setStringValue :를 호출하면 레이블이 업데이트되지 않습니다.

변경하려면 뷰 컨트롤러의 코드 내에서 메서드를 사용하지만 작동하지 않으면 IBOutlet이 제대로 연결되지 않은 것 같습니다. 이는 사용자 지정보기가 완벽하게 연결.

아이디어가 있으십니까?

답변

0

, 그냥 NIB의 이름으로 초기화하기 : 답장에 대한

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
1

awakeFromNib에 중단 점을 설정하고 디버거에서 레이블 출력의 값이 무엇인지 찾습니다. awakeFromNib가 호출되기 전에 모든 콘센트가 연결되어 있어야합니다. 그래도 여전히 없다면 답을 얻을 수 있습니다. setStringValue : nil에서 정확히 "아무것도"하지 않습니다. 이 경우 콘센트를 올바르게 묶지 않았거나 제대로 바운드 한 적이 있었는데 나중에 이름을 변경했을 수 있습니다.이 경우 Xcode4에 노란색 경고 삼각형이 있거나 인터페이스 작성기에 뭔가 잘못 되었음이 표시되어야합니다. 그러나 앱이 빌드되거나 실행되는 것을 막지는 못합니다. 콘센트는 객체 생성 후 초기 값을 유지합니다 (nil 임). 당신이 당신의 NSViewControllers을 ALLOC 때

0

감사합니다, 그들은 도움이되었다하지만 확실히 내가 뭘에서 얻고 있었다. 빈 NIB를 만들고이를 사용자 정의 NSView 및 몇 가지 다른 컨트롤로 채워서 해결했습니다. 나는 그 컨트롤을위한 IBOutlets를 가진 NSView 서브 클래스를 만들고 인터페이스 빌더의 내 서브 클래스에 대한 커스텀 뷰의 ID를 설정했다. 작동시키기위한 속임수 그릴 싶었던 시간은 내 서브 클래스에서 펜촉을로드하고 원하는대로 설정 한 뷰를 리턴하는 클래스 메소드를 작성하는 것이 었습니다. 아래

코드 : 답장에 다시

+(id)todoViewFromNibWithFrame:(NSRect)frameRect todoList:(TodoList *)aTodoList 
{ 
    NSNib *todoViewNib = [[NSNib alloc] initWithNibNamed:@"TodoView" bundle:nil]; 
    NSArray *objects = nil; 

    id todoView = nil; 

    [todoViewNib instantiateNibWithOwner:nil topLevelObjects:&objects]; 
    for (id object in objects) { 
     if ([object isKindOfClass:[self class]]) { 
      todoView = object; 
      [todoView setTodoList:aTodoList]; 
      break; 
     } 
    } 

    [todoViewNib release]; 
    return todoView; 
} 

감사합니다! 스티브

관련 문제