fonctionnement des shortcuts 3D Touch

LeChatNoirLeChatNoir Membre, Modérateur

Salut,


 


Je suis en train de créer des shortcuts statics pour 3D Touch.


Le principe du tableau dans le info.plist est assez simple à  comprendre.


 


Par contre, je ne comprends pas bien comment gérer le truc dans le AppDelegate.


 


Il y a une méthode spécifique qui est appelée et permet de détecter quel shortcut a été choisis mais après ?


quelle est la meilleure façon de faire ?


Définir une propriété dans le appDelegate et la setter en fonction du menu choisi et traité ca dans le ApplicationDidFinishLaunchingWithOption ?


 


 


Réponses

  • Avec un block? (Une property block)
  • En étant étranger au phénomène (pas d'iPhone avec 3D Touch), je dirais que c'est le même principe que du deeplink/customSchemeURL...


  • Salut,


     


    Moi je fais quelque chose qui ressemble à  ça:



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

    ...
    [self handleShortCutItem:[launchOptions objectForKey:UIApplicationLaunchOptionsShortcutItemKey] atStart:YES];
    ...

    }

    - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
    [self handleShortCutItem:shortcutItem atStart:NO];
    }

    - (BOOL)handleShortCutItem:(UIApplicationShortcutItem *)shortcutItem atStart:(BOOL)s {
    BOOL handled = NO;

    if (!shortcutItem) {
    return handled;
    }

    ...
    if ([shortcutItem.type isEqualToString:kQuickActionResume]) {
    handled = YES;
    ...
    }

    return handled;

    }

    Je sais pas si c'est la meilleur façon de faire mais ça marche bien :)


  • LeChatNoirLeChatNoir Membre, Modérateur

    Salut Dédo,


     


    Effectivement, c'est la bonne méthode :)


    Après, faut juste gérer les 2 cas :


    => l'appli n'était pas lancée et on part de 0


    => l'appli était lancée et déjà  sur un viewController particulier.

  • LeChatNoirLeChatNoir Membre, Modérateur

    Attention....


     


    Ca : 


    [launchOptions objectForKey:UIApplicationLaunchOptionsShortcutItemKey]


     


    Ca plante direct sous iOS8....

  • MagiicMagiic Membre

    Oui ! Il suffit de voir si les classes de 3D Touch existent ou de vérifier la version du système.


  • LeChatNoirLeChatNoir Membre, Modérateur

    oui mais bon... 


     


    C'est juste un objectForKey... On aurait pu penser que ca ramènerait nil et tester ça...


     


    Mais non. Ca plante sauvagement. Donc effectivement, faut rajouter une condition.

  • colas_colas_ Membre
    Tu peux t'en sortir je pense avec un #ifdef ;-)
  • LarmeLarme Membre

    Je testerais plus comme cela :



    if (&UIApplicationLaunchOptionsShortcutItemKey != NULL && launchOptions[UIApplicationLaunchOptionsShortcutItemKey])
    {
        //Do my 3DTouch thing.
    }

    Normalement &MyVarConst != NULL est l'équivalent d'un respondsToSelector: d'une méthode quand on gère notamment plusieurs versions d'API/iOS.


  • LeChatNoirLeChatNoir Membre, Modérateur

    J'avais fait un truc crade qu'Ali déteste :)


    Je teste ça dans qques minutes et te dis :)


  • DrakenDraken Membre
    mai 2016 modifié #12

    TUEUR DE PONEYS !    >:)


  • dédodédo Membre

    Ah merci de l'info! :D


  • LeChatNoirLeChatNoir Membre, Modérateur

    Ca fonctionne Larme. Merci :)


  • AliGatorAliGator Membre, Modérateur

    Oui, si ça crachait même alors que ce n'est qu'un objectForKey, c'est tout simplement parce que dans le SDK iOS8 la constante n'est pas définie (donc vide) car elle n'existait pas à  l'époque. Du coup c'est un peu comme si tu faisais un "objectForKey:nil" dans ce cas...


     


    Il faut effectivement tester si la constante a bien une adresse mémoire (et est donc bien existante dans le SDK) comme suggéré par Larme.


Connectez-vous ou Inscrivez-vous pour répondre.