2010-11-21 5 views
4

Des idées?Comment redémarrer une application iPhone par programmation sous iOS

Je trouve cette façon http://writeitstudios.com/david/?p=54

Mais peut-être quelque chose de simple

+7

Non. Ne faites pas cela. Pour l'amour de Dieu. –

+0

Eh bien l'exemple que vous avez cité est pour l'application Cocoa pas pour l'application Cocoa Touch (iOS). Deuxièmement, il n'est pas possible sur iOS de redémarrer votre application. – itsaboutcode

+2

Et, bien sûr, la vraie question: Pourquoi voulez-vous? –

Répondre

20

La seule façon que je sais de faire ceci n'est pas idéale, mais cela fonctionne. Tout d'abord, votre application doit désactiver l'exécution en arrière-plan (multitâche) L'application doit quitter à la fermeture, pas en arrière-plan. Ceci est fait avec la clé de plist UIApplicationExitsOnSuspend. Deuxièmement, votre application doit enregistrer un schéma d'URL personnalisé qui peut être utilisé pour lancer l'application. Troisièmement, vous avez besoin d'une page Web hébergée quelque part qui, une fois chargée, redirigera vers le schéma d'URL personnalisé de votre application. En outre, l'utilisateur a besoin d'une connexion Internet active. Pour quitter et redémarrer, appelez UIApplication openURL sur votre page Web de redirection hébergée. Votre application va quitter et Safari va lancer et charger votre page. La page redirigera Safari vers votre schéma d'URL personnalisé, incitant Safari à appeler en interne openURL, ce qui provoquera le lancement de votre application par iOS.

+2

Si vous vous sentez pervers, vous pouvez héberger la page de votre application elle-même (vous avez environ 10 secondes pour quitter dans -applicationWillTerminate: '; il peut être plus facile de la servir dans un autre thread, mais vous pouvez également appeler socket(), bind(), listen(), accept(), write() et close()). Laisser votre application se terminer après que vous avez servi la page et que la page lance votre application avec un délai (l'en-tête "Actualiser" ou "Recharger", je pense). –

+0

Vous n'avez même pas besoin de définir UIApplicationExitsOnSuspend; il suffit d'appeler exit(). Envelopper le "serveur" dans -beginBackgroundTaskWithExpirationHandler: assure que votre application reçoive suffisamment de temps CPU pour servir la chose, puis vous pouvez dormir pendant 500 ms (pour "assurer" l'envoi des données) et exit(). Le bit compliqué est en train d'analyser la requête, mais vous pouvez le contourner en dormant pendant 500 ms et en lisant dans un tampon de taille importante (8K), ou (si vous vous sentez aventureux) sélectionnez + lire pendant 500 ms. –

+0

Intéressant ... mais la solution craintive! – KiNG

0

À moins que vous développez pour les appareils jailbreakés, Apple ne sera pas même vous permettre de mettre fin à votre application programatically. Donc, redémarrer l'appareil est hors de question.

+2

Je pense que Alexei se réfère à redémarrer l'application, pas l'appareil. Bien sûr, redémarrer ce dernier est plus que hors de question. –

+0

Bien sûr vous pouvez — vous pouvez appeler exit() ou kill() ou juste revenir de main(), ou d'autres choses (comme abort()). Il est indiscernable d'un crash et va probablement faire rejeter votre application par Apple pour cette raison. –

+0

Que signifie retourner de main()? Je résous le problème en ajoutant le bouton exit() à l'application. J'en ai besoin car mesurer la première fois et la seconde fois toujours différemment. –

1

mon message que vous avez lié à se réfère à une application Cocoa, pas l'iOS. Sur l'iOS, vous pouvez quitter une application (mais Apple n'aime pas ça) en utilisant exit(0); mais je ne le recommande pas. Cependant, vous ne pouvez pas redémarrer les applications iPhone.

-1

Votre AppDelegate instance a une méthode

(void)applicationDidBecomeActive:(UIApplication *)application 
{ 
} 

Ici, vous pouvez mettre la logique de savoir si l'application doit redémarrer, ou continuer à faire ce qu'il faisait. Par exemple, vous pouvez avoir une variable BOOLappMustRestart qui est au début false mais qui est déclenchée comme vraie chaque fois qu'il se passe quelque chose dans votre application que vous aimeriez voir la prochaine fois être une nouvelle relance.

if (appMustRestart) 
{ 
    [self resetVars]; // call a method that resets all your vars to initial settings 

    // INSERT CODE HERE TO TRANSFER FOCUS TO INITIAL VIEWCONTROLLER 
} 
Questions connexes