0

Es fällt mir schwer herauszufinden, wie ich meine schnellen Aktionen zum Laufen bringen kann, wenn ich meine App mit einer schnellen Aktion starte.Richtiger Umgang mit der Anwendung, die mit schnellen Aktionen gestartet wird

Meine schnellen Aktionen funktionieren jedoch, wenn die App im Hintergrund war und mit der schnellen Aktion neu gestartet wurde.

Wenn ich versuche, die App direkt aus der Schnellaktion zu starten, öffnet sich die App, als ob sie durch einfaches Tippen auf das App-Symbol gestartet wurde (d. H. Es tut nichts).

Hier ist ein Code von meinem App Delegate.

In didFinishLaunchingWithOptions:

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

Verfahren genannt:

-(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; 
     } 
    } 
} 

Die einzige Aktion, die durchgeführt werden muss, ist, dass meine Seite View-Controller (die innerhalb des meetingVC eingebettet ist) sollte Wechseln Sie zu einer bestimmten Seite in Bezug auf die gewählte Verknüpfung.

Irgendwelche Ideen auf, was die Abkürzung verursacht, nichts zu tun, wenn sie es benutzt, um zu starten, anstatt die APP vom Hintergrund wieder zu öffnen ??

+0

Ich habe dieses Problem schon wieder gelöst und habe das gleiche Problem erneut, ich denke es ist, weil beim Starten der App mit einer schnellen Aktion der Root-View-Controller noch nicht erstellt wurde und Sie keine Methoden aufrufen können darauf. Ich habe leider keine Lösung. – SimonBarker

+0

Ich habe eine Lösung für mein Programm gefunden! Hoffentlich ist es anwendbar auf andere, die nach einer Möglichkeit suchen, dies zu tun. – iOShepherd

Antwort

0

Ich erkannte, dass ich versuchte, meine Methoden auf einem View-Controller aufzurufen, der noch nicht im Speicher war. Dies verursachte bizarres Verhalten in meiner App. Ich hatte die richtige Methode, um auf den View-Controller zuzugreifen, und dann dämmerte es mir, dass ich versuchen konnte, den Code mit GCD auszuführen.

__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]; 
    }); 

Das oben beschriebene funktioniert wie Magie, und die Verknüpfungen führen zu der richtigen Seite. Die Verwendung eines ähnlichen Ansatzes bei Mine führt hoffentlich zu den gewünschten Ergebnissen für alle anderen, die ihre Verknüpfungen durch das Starten der App arbeiten lassen wollten.

Verwandte Themen