0

나는 탭 표시 줄 컨트롤러에 2 개의보기 컨트롤러가 있습니다. 내 2nd Nav Controller가 배지 값을 설정하려고합니다. 앱이 시작될 때이 컨트롤러가로드되지 않으므로 배지가 표시되지 않습니다. 해당 탭으로 이동하면 배지가 제대로 업데이트됩니다. 인스턴스화되지 않은보기 컨트롤러에 배지 값을 설정하는 올바른 방법은 무엇입니까?

이 코드가 실행

때 탭의 뷰 컨트롤러로드/다시로드/업데이트/등 ...

[self.navigationController.tabBarItem setBadgeValue : [있는 NSString stringWithFormat : "% U"@ [self.photos 카운트] ]];

올바른 방법은 다음과 같습니다. 사용자 지정 클래스로 Nav Controller를 재정의하고 해당 수준에 배지 값을 넣으시겠습니까? 그것이이 정보를 넣어야하는 곳인 것처럼 보이지만 확실한 답을 찾지 못했습니다.

+0

두 번째 _View_ 컨트롤러에서 데이터를 가져 오는 위치는 어디입니까? 'self.photos'는 무엇입니까? 첫 번째보기 컨트롤러에서 동일한 데이터를 얻을 수있는 방법이 있습니까? – foundry

+0

2 개의 뷰 컨트롤러는 실제로 서로의 데이터를 보지 않아야합니다. 그것들은 서로 다른, 자체 포함 된 응용 프로그램입니다. self.photos 정보는 궁극적으로 사용자의 기본 목록에서 나옵니다. 그러나 제 1의보기 컨트롤러가 실제로 아무것도 알지 못하는 데이터를 가져 오는 것이 "좋지 않을"것이라고 생각하는 것 같습니다. – kejoki

+0

엄격히 관련이 없지만 ... 스토리 보드, xib 또는 코드 만 사용하고 있습니까? – foundry

답변

1

TabBarController가로드 될 때 포함 된 모든 초기 ViewController가 초기화됩니다. 그러나 해당 보기은 해당 탭 항목을 탐색 할 때까지로드되지 않습니다. 따라서 어떤 뷰로드 방식 (viewDidLoad 등)에서도 코드를 실행할 수 없습니다. 그러나 초기화 메소드 중 하나를 대체하여 코드를 실행할 수 있습니다. 스토리 께의 ViewController 아카이브 해제의 공정을 사용하면 NIB는로드 된이 방법 트리거 경우

는 : 스토리 보드를 사용하지 않는 경우

- (void) awakeFromNib 
{ 

} 

을이 initialiser 전에 NIB 로딩하기 위해 호출된다 :

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

어떤 경우 든 이러한 메서드를 재정 의하여 일부 코드를 실행할 수 있습니다.

- (void) awakeFromNib 
    [super awakeFromNib]; 
    [self.navigationController.tabBarItem 
      setBadgeValue:[NSString stringWithFormat:@"badgeValue"]]]; 
} 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     [self.navigationController.tabBarItem 
      setBadgeValue:[NSString stringWithFormat:@"badgeValue"]]]; 
    } 
    return self; 
} 

그러나 데이터를 가져 오는 위치는주의해야합니다. 이 시점에서 self.photos은 예를 들어 초기화되지 않을 수 있습니다. 이 데이터가 userdefaults에서 나오면 여기에있는 데이터를 읽고 그에 따라 배지를 설정할 수 있어야합니다.

+0

예 - 작동 중입니다. 내 코드를 실행하기 전에 호출해야하는 [super awakeFromNib]가 있습니까? – kejoki

+0

@kejoki - 그렇습니다.'super awakeFromNib]를 추가했습니다.'super'가 그걸로 뭔가를하고있는 경우에 대비 해서요. – foundry