0

빠른 작업으로 응용 프로그램을 시작할 때 빠른 동작을 수행하는 방법을 알아내는 데 어려움을 겪고 있습니다.빠른 동작으로 응용 프로그램 실행을 처리하는 올바른 방법

그러나 빠른 동작으로 앱이 백그라운드에 다시 실행되면 내 빠른 동작이 작동합니다.

빠른 실행에서 곧바로 앱을 시작하려고하면 앱 아이콘을 두드리는 것만으로 앱이 시작됩니다 (즉 아무 것도하지 않음).

다음은 내 App Delegate의 코드입니다.

에서 didFinishLaunchingWithOptions :

UIApplicationShortcutItem *shortcut = launchOptions[UIApplicationLaunchOptionsShortcutItemKey]; 
if(shortcut != nil){ 
    performShortcutDelegate = NO; 
    [self performQuickAction: shortcut fromLaunch:YES]; 
} 

불리는 방법

-(BOOL) performQuickAction: (UIApplicationShortcutItem *)shortcutItem fromLaunch:(BOOL)launchedFromInactive { 
NSMutableArray *meetings = [self.fetchedResultController.fetchedObjects mutableCopy]; 
[meetings removeObjectAtIndex:0]; 
unsigned long count = meetings.count; 
BOOL quickActionHandled = NO; 
if(count > 0){ 
    MainViewController *mainVC = (MainViewController *)self.window.rootViewController; 
    if(launchedFromInactive){ 
     mainVC.shortcut = shortcutItem; 
    } 
    else{ 
     UINavigationController *childNav; 
     MeetingViewController *meetingVC; 
     for(int i = 0; i < mainVC.childViewControllers.count; i++){ 
      if([mainVC.childViewControllers[i] isKindOfClass: [UINavigationController class]]){ 
       childNav = mainVC.childViewControllers[i]; 
       meetingVC = childNav.childViewControllers[0]; 
       break; 
      } 
     } 

     self.shortcutDelegate = meetingVC; 

     if ([shortcutItem.type isEqual: @"Meeting"]){ 
      NSNumber *index = [shortcutItem.userInfo objectForKey:@"Index"]; 
      [self.shortcutDelegate switchToCorrectPageWithIndex: index launchedFromInactive:NO]; 
      quickActionHandled = YES; 
     } 
    } 
} 

수행 될 필요가있는 유일한 동작 인 것을합니다 (meetingVC 내부에 매립된다) 내 페이지 뷰 컨트롤러해야 선택한 바로 가기와 관련하여 특정 페이지로 전환하십시오.

배경에서 앱을 다시 열지 않고 실행하기 위해 바로 가기를 사용하지 않는 이유는 무엇입니까?

+0

이전에이 문제를 다시 접했을 때 같은 문제가 다시 발생했습니다. 빠른 동작으로 앱을 시작할 때 루트보기 컨트롤러가 아직 생성되지 않았으므로 메소드를 호출 할 수 없기 때문입니다 그 위에. 나는 슬프게도 해결책이 없다. – SimonBarker

+0

내 프로그램에 대한 해결책을 찾았습니다! 바라기를이 방법을 찾는 다른 사람들에게도 적용 할 수 있습니다. – iOShepherd

답변

0

메모리에 아직없는 뷰 컨트롤러에서 내 메서드를 호출하려고한다는 것을 알게되었습니다. 이것은 내 응용 프로그램에서 기괴한 행동을 일으키는했다. 뷰 컨트롤러에 접근하는 데 올바른 접근법을 가졌고 GCD를 사용하여 코드를 실행하려고 시도 할 가능성이 생겼습니다.

__block MeetingViewController *safeSelf = self; 
contentVC = [self initializeContentViewController: self.didLaunchFromInactive withPageIndex: intIndex]; 
NSArray *viewControllers = @[contentVC]; 
dispatch_async(dispatch_get_main_queue(), ^{ 
     [safeSelf.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 
    }); 

위의 내용은 마술처럼 작동하며 바로 가기가 올바른 페이지로 연결됩니다. 유사한 접근 방식을 사용하면 앱을 실행하여 단축키를 사용하려는 다른 사용자에게 원하는 결과를 얻을 수 있습니다.