0

내 앱은 내비게이션 컨트롤러와 뷰 컨트롤러로 구성됩니다. 내 UI의 일부는 스토리 보드에서 수행되고 일부는 코드에서 시작됩니다 (viewDidLoad에서). 내 목표는 응용 프로그램은 푸시 알림에서 시작됩니다 (백 버튼, 자성 바, 레이블 및 테이블로 구성) childViewController X를로드하는 것입니다 "제대로" AppDelegate에이 방법을 통해 :뷰를 "올바르게"로드하는 방법 iOS

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

이 힘 너희들에게 간단한 질문이 되겠지만 나는 몇 일 동안 몇 가지 질문을했다. (나의 질문 역사를 볼 수있다.) 여러 가지 방법을 시도하고, 내 응용 프로그램 후 다음 중 하나를

  • 로드 네비게이션 바 있지만 레이블 네비게이션 바없이

    • 가 충돌
    • 부하를 탐색 바 있지만, 검은 색과
    • 로드 (뒤로 버튼이 작동하지 않습니다) 화면 아래

    tableView 만 스토리 보드로 끌어옵니다. 탐색 모음이 유추되었지만 뒤로 버튼과 제목을 지정하는 코드가 있습니다. 나머지는 모두 .m 파일의 코드를 통해 수행됩니다.

    사람들은이 질문을하기 전에 물어 보았지만 그 방법은 효과가 없었습니다. 푸시 알림을 통해이 childViewController를 올바르게로드하려면 어떻게해야합니까?

    EDIT/UPDATE : 지금까지

    내 코드 :

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
    NSDictionary *dictionary = [launchOptions  objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
    
    if (dictionary != nil) 
    { 
    
    UIStoryboard *mainstoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController* firstVC = [mainstoryboard instantiateViewControllerWithIdentifier:@"NotificationsViewController"]; 
    [self.window.rootViewController addChildViewController:firstVC]; 
    [(UINavigationController *)self.window.rootViewController pushViewController:firstVC animated:NO]; 
    self.window.rootViewController.childViewControllers); 
    }} 
    

    오류 코드 :

    '-[SWRevealViewController pushViewController:animated:]: unrecognized selector sent to instance 0x14575f20' 
    

    SWRevealViewController 내 사이드 ​​바 메뉴보기 컨트롤러 내 라이브러리입니다.

    UPDATE2 :

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:@"NotificationsViewController"]; 
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.window.rootViewController = initViewController; 
    [self.window makeKeyAndVisible]; 
    

    이 올바른의 ViewController을로드하지만, 네비게이션 바없는 : 는 또한이 방법을 시도했습니다.

  • +5

    당신이 만든 코드를 게시 할 수 있도록 노력하겠습니다? –

    +0

    우리는 여전히 "childViewController"를 추측 할 필요가 있습니까, 아니면이 질문을 일부 코드로 업데이트 할 것입니까? – Pawan

    +0

    @MarcoPace 지금 코드를로드했습니다. – user3178926

    답변

    1

    이 시도 : 당신은 당신의 코드에서 일부 문제가 있었다

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
        NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
    
        if(dictionary != nil) { 
         UIStoryboard *mainstoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
         UIViewController *firstVC = [mainstoryboard instantiateViewControllerWithIdentifier:@"NotificationsViewController"]; 
         UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
    
         // Navigation already created 
         if(navigationController) { 
          [navigationController pushViewController:firstVC animated:NO]; 
    
         // Navigation not created 
         } else { 
          UINavigationViewController *navigationController = [[UINavigationViewController alloc] initWithRootController:firstVC]; 
    
          [self.window setRootViewController:firstVC]; 
          [self.window makeKeyAndVisible]; 
         } 
        } 
    
        return YES; 
    } 
    

    : 당신은 탐색 모음을 가지고 푸시/팝 액션을 관리하기 위해 UINavigationController가있을 필요가

    1. 을, 창 루트 컨트롤러이어야합니다. UINavigationController. 당신이 가장 간단한 방법은 직접 루트 컨트롤러로 초기화하는 것입니다 은 UINavigationController를 초기화하므로 사용자 행동에 대한 푸시/팝을 떠날 필요가있는 경우

    2. : 응용 프로그램은 그래서 항상 루트 컨트롤러가 즉시 만들지 않으시겠습니까?

    3. "addChildController"은 또 다른 것입니다. 사용자 지정 컨테이너 컨트롤러를 만드는 데 사용됩니다. 즉, 모든 비즈니스 논리를 수동으로 구현해야한다는 의미입니다. 난 당신이 충분히 경험이있는 경우에만 그것을 사용하는 것이 좋습니다, 그것은 어려울 수 있기 때문에 - 코코아 애플 리케이션의 작은 세트를 남길만큼 충분한 구성 요소가 있습니다.

    4. 세 번째 부품 컨트롤러 인 "SWRevealViewController"을 사용하고 있습니다. 그들은 예제 프로젝트가 있어야합니다, 당신은 "복사"하고 자신의 목적을 위해 그것을 사용자 정의 할 수 있습니다.

    날 코드가 잘 작동하는지, 그렇지 않으면 알고있는 새로운 오류를 게시하자 난 당신이