2016-10-06 4 views
0

Ich habe Probleme mit meiner iOS App. Ich möchte jeden Tag eine Funktion ausführen, auch wenn meine Anwendung nicht auf meinem IPhone im Vordergrund ist. Ich habe versucht, NSTimer Objekt zu verwenden, aber es funktioniert nicht, wenn meine App im Hintergrund ist.Swift 3 - Ausführen einer Funktion, auch wenn die App im Hintergrund ist

Wie kann ich das erreichen?

Hinweis: Meine Funktion löst eine Benachrichtigung aus, die sich vom aktuellen Tag unterscheidet.

+0

Sie können die Hintergrundaktualisierung verwenden, aber die Ausführungszeit kann nicht festgelegt werden. Sie können es mit einer Logik kombinieren, die eine lokale Benachrichtigung für die erforderliche Zeit plant. Andernfalls können Sie eine Push-Benachrichtigung verwenden – Paulw11

+2

Warum müssen Sie einmal am Tag etwas ausführen, auch wenn die App nicht läuft? Das wirklich zu tun, ist sehr selten. – rmaddy

Antwort

0

Sie können es nicht tun, weil Sie nicht im Hintergrund ausgeführt werden können und Ihre App sogar nicht ausgeführt wird. Überdenken Sie Ihre Architektur. Richten Sie beispielsweise 30 Benachrichtigungen für die nächsten 30 Tage ein, falls Ihre App während dieser Zeit nicht ausgeführt wird. Das ist eine Benachrichtigung: eine Nachricht, die in Ihrem Auftrag vom System übermittelt wird und die immer lautet.

4

Paulw11 ist korrekt. Sie können eine Hintergrundaktualisierung und eine lokale Benachrichtigung verwenden. Der Hintergrund-Abruf wird zufällig aufgerufen. Bei jedem Aufruf wird die lokale Benachrichtigung zurückgesetzt. Dieser Code ist Obj C, es ist ein bisschen alt, aber das Konzept ist das gleiche.

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 


BackgroundFetch * fetch = [[BackgroundFetch alloc] init]; 

[fetch fetchNewDataWithCompletionHandler:^(UIBackgroundFetchResult result) { 
    completionHandler(result); 
} successDictionary:^(NSDictionary *responseDict) { 

    // Schedule local notification, in this case it is 9am 

    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

     UILocalNotification *notif = [[UILocalNotification alloc] init]; 

      NSCalendar *calendar = [NSCalendar currentCalendar]; 
      NSDateComponents *components = [[NSDateComponents alloc] init]; 

      components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]]; 

      NSInteger day = [components day]; 
      NSInteger month = [components month]; 
      NSInteger year = [components year]; 

      [components setDay: day]; 
      [components setMonth: month]; 
      [components setYear: year]; 
      [components setHour: 9]; 
      [components setMinute: 0]; 
      [components setSecond: 0]; 
      [calendar setTimeZone: [NSTimeZone systemTimeZone]]; 
      NSDate *dateToFire = [calendar dateFromComponents:components]; 

     notif.fireDate = dateToFire; 
     notif.timeZone = [NSTimeZone systemTimeZone]; 
     notif.alertBody = [NSString stringWithFormat:@"%@: %@", responseDict[@"city"], responseDict[@"temp"]]; 

     [[UIApplication sharedApplication] scheduleLocalNotification:notif]; 
} 
+0

@ThBM: Willkommen bei StackOverflow. Das sieht nach der richtigen Antwort aus. Wenn es Ihr Problem löst, markieren Sie es bitte als die angenommene Antwort. – mttdbrd

Verwandte Themen