2010-03-08 8 views
0

현재 사용중인 iPhone 앱에 '로드'기능을 쓰고 있습니다.UIViewController 스택을 다시 만드는 방법은 무엇입니까?

실제로 내가하고 싶은 일은 사용자가 어디에서 중단했는지를 다시 얻는 것입니다. 그렇게하기 위해 전에 등장한 모든 UIViewController을 다시 만들고 싶습니다.

[[self navigationController] pushViewController:newController animated:YES];을 호출하면 내 문제는 UIViewController이 표시되지 않습니다.

단추를 누른 후처럼 이벤트 처리기로 호출 할 때 동일한 코드가 제대로 작동합니다. 하지만 even (예 : viewDidLoad)을 사용하지 않고 동일한 작업을 수행하면 새보기 컨트롤러의 loadView 메서드가 호출되지 않습니다. (일부 의사 요소)

내 실제 코드 :

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    if (loading) 
     [self onSomeEvent]; 
} 

- (void)onSomeEvent { 
    UIViewController *newController = //init....; 
    [[self navigationController] pushViewController:newController animated:YES]; 
    [newController release]; 
} 

내가 viewDidLoad 그런 전화를 할 수있는 권리 장소가 아니다 것 같아요,하지만 무엇입니까?

+0

사용자가 앱을 다시 실행할 때 상태를 복원하려고합니까? 이 답변이 도움이되는지 확인하십시오 : http://stackoverflow.com/questions/2360578/iphone-navigationcontroller-autoloading-to-three-level/2360901#2360901 – DyingCactus

답변

0

컨트롤러를 가로 지르는 "로드"기능을 확산시키는 것이 최선의 방법인지 확신 할 수 없습니다.

나는 응용 프로그램의 init에 applicationDidFinishLauching 부분에 넣기를 원합니다. 그런 다음 이전 상태 (IMHO를보다 쉽게 ​​처리 할 수있는)를 복원하는 중앙 집중식 장소가 있습니다.

처럼의 당신이 좀 더 고급 복원 기능을 구현한다고 가정하자

  • 가의 스택을 복원하면 이전 상태
  • 을 복원하고있는 사용자를 나타 내기 위해 활동 표시와 함께 시작하여 UIView를 표시하여 네비게이션 컨트롤러
  • 의 컨트롤러는 스플래시는 applicationDidFinishLauching에서 모든 코드를보다 쉽게 ​​

을 제거 : 그것을 ' 모두 한 곳에서 관리됩니다.

이전 상태를 내비게이션 컨트롤러로 복원 할 때 컨트롤러를 밀어 넣을 때 전환을 사용하지 않고 YES 대신 animated:NO을 사용할 수 있습니다. 자신의 관점에서 다루기가 더 쉬울 것이며 변환을 수행하는 데 필요한 시간을 제거하면 복원 시간이 줄어들 수 있습니다.

관련 문제