fonctionnement des shortcuts 3D Touch
LeChatNoir
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 ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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:
Je sais pas si c'est la meilleur façon de faire mais ça marche bien
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.
Attention....
Ca :
[launchOptions objectForKey:UIApplicationLaunchOptionsShortcutItemKey]
Ca plante direct sous iOS8....
Oui ! Il suffit de voir si les classes de 3D Touch existent ou de vérifier la version du système.
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.
Je testerais plus comme cela :
Normalement &MyVarConst != NULL est l'équivalent d'un respondsToSelector: d'une méthode quand on gère notamment plusieurs versions d'API/iOS.
J'avais fait un truc crade qu'Ali déteste
Je teste ça dans qques minutes et te dis
TUEUR DE PONEYS !
Ah merci de l'info!
Ca fonctionne Larme. Merci
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.