beginBackgroundTaskWithExpirationhandler n'est jamais appelé
J'ai une application qui lit les fichiers audio en arrière-plan. Je suis en train d'utiliser beginBackgroundTaskWithExpirationHandler
pour passer à la piste suivante lorsque la piste en cours est terminé.
Voici le code qui est appelé lors de la lecture des changements d'état. Il ne se connecte jamais le "beginBG appelé" même si d'autres le code de la même méthode met en œuvre avec succès dans le fond.
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[self ffwButtonPressed:ffwButton];
NSLog(@"beginBG called");
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
ffwButtonPressed
appelle quelques méthodes différentes pour changer de piste. Quand il est complet...
UIApplication *app = [UIApplication sharedApplication];
if (bgTask != UIBackgroundTaskInvalid) {
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
NSLog(@"end bgTask");
Edit: Déclaration
UIBackgroundTaskIdentifier bgTask;
Edit: Dans Le ViewDidLoad
bgTask = 0;
OriginalL'auteur mnort9 | 2012-07-23
Vous devez vous connecter pour publier un commentaire.
Vous sont effectivement incompréhension de la fonction
-(UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler
Le bloc argument appelé "gestionnaire" est ce qui va se passer lors de la tâche en arrière-plan d'échéance (10min).
Pour obtenir votre code en cours d'exécution, vous devez mettre votre code à partir de l'expiration du gestionnaire:
Voici un lien vers le la documentation
OriginalL'auteur Tomusm
J'ai fini par ne plus avoir besoin de
beginBackgroundTaskWithExpirationHandler
à tous. Cette ligne a résolu mon problème...OriginalL'auteur mnort9
Est-ce que votre Application a une autorisation de s'exécuter en arrière-plan comme une Application Audio? (il faut mettre le mode approprié dans votre Info.plist)
Voir Apple docs
OriginalL'auteur Wiz
beginBackgroundTaskWithExpirationhandler gestionnaire seulement quand la minuterie de voile qui est assez grande valeur. La tâche réelle, comme l'a mentionné Tomsum ci-dessus ne doit pas être une partie de la partie de bloc. Aussi n'oubliez pas d'appeler endBackgroundTask: à la fin si backGroundTaskID != UIBackgroundTaskInvalid et la seule chose que vous devez faire, dans le bloc est l'établissement de la tâche variable = UIBackgroundTaskInvalid
OriginalL'auteur Atif Khan
Swift Version:
OriginalL'auteur Fouad
Est-ce que tout votre code? Peut-être que le
bgTask
variable n'est pas initialisée, Vous devez déclarer bgTask avant de vous affecter. Essayez cette -Incompatible pointer to integer conversion initializing 'UIBackgroundTaskIdentifier' (aka 'unsigned int') with an expression of type 'void *'
;BTW, j'ai édité dans ma déclaration, mais je n'ai pas mis à néant.
UIBackgroundTaskIdentifier
est unNSUInteger
, pas un objet. Attribuez-lui une valeur intégrale, pasnil
.oui josh est correct. init
UIBackgroundTaskIdentifier
en entier, puis voir ce que vous obtenez.J'ai mis
bgTask = 0
dans le ViewDidLoad.beginBackgroundTaskWithExpirationHandler
est encore jamais appelé.OriginalL'auteur Srikar Appalaraju