iPhone und iPod touch Development

iPhone und iPod touch Development

Posts 1-7 of 7
  • Daniel Kropf
    Daniel Kropf    Premium Member
    The company name is only visible to registered members.
    Problem mit Scheduled Notification
    Hallo allerseits

    Ich versuche seit einigen Tagen meiner Kalender-App beizubringen, dass sie den aktuellen Tag als Badge auf dem Icon anzeigt, sofern der Benutzer dies denn wünscht (prefs). Dies ist kein Problem wenn ich die App starte und beende.

    Leider scheint aber die scheduled notification, welche ich absetze damit die nicht laufende App automatisch den Tag wechselt, sobald der Tag wechselt (also kurz nach Mitternacht), irgendwie nicht zu funktionieren:

    Scheduled Notification <UIConcreteLocalNotification: 0xa81bb80>{fire date = 2011-02-03 00:01:00 +0000, time zone = Europe/Zurich (GMT+01:00) offset 3600, repeat interval = 16, next fire date = 2011-02-04 00:01:00 +0000}


    In meinen Anfänger-Augen sieht die eigentlich soweit gut aus, aber dennoch scheint es entweder in obiger notification oder aber im untigen "applicationDidEnterBackground" ein Problem zu geben:

    - (void)applicationDidEnterBackgroundUIApplication *)application {
    NSAssert(self->bgTask == UIBackgroundTaskInvalid, nil);

    // NSLog(@"Did enter Background");

    bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{
    dispatch_async(dispatch_get_main_queue(), ^{
    [application endBackgroundTask:self->bgTask];
    self->bgTask = UIBackgroundTaskInvalid;
    });
    }];

    dispatch_async(dispatch_get_main_queue(), ^{
    while ([application backgroundTimeRemaining] > 1.0) {
    //NSString *friend = [self checkForIncomingChat];

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"iconBadgeControl"]) {
    UILocalNotification *localNotif = [[UILocalNotification alloc] init];

    if (localNotif) {
    localNotif.alertBody = nil;
    localNotif.alertAction = nil;
    localNotif.soundName = nil;

    DisDate *dd = [[DisDate alloc] initWithGregDate:[NSDate date]];

    localNotif.applicationIconBadgeNumber = dd.day;
    [application presentLocalNotificationNow:localNotif];
    [localNotif release];
    //friend = nil;
    break;
    }
    }
    }

    [application endBackgroundTask:self->bgTask];

    self->bgTask = UIBackgroundTaskInvalid;
    });
    }


    Oder ist der Fehler grundsätzlich in meinem Verständnis dieses Konzepts? Andere Apps können das doch auch und ich hatte angenommen, die machen das eben über diese scheduled notification, aber vielleicht täusche ich mich da gewaltig? Andererseits heisst es ganz klar in der "UILocalNotification Class Reference":

    "The operating system is responsible for delivering the notification at the proper time; the application does not have to be running for this to happen."

    Hat irgend jemand Erfahrung in diesem Gebiet und könnte mir helfen?

    Vielen Dank im Voraus.

    Gruss und viel Spass
    Daniel
  • Olaf Japp
    Olaf Japp    Premium Member   Group moderator
    The company name is only visible to registered members.
    Re: Problem mit Scheduled Notification
    Daniel Kropf schrieb:

    - (void)applicationDidEnterBackgroundUIApplication *)application {
    Hi Daniel,

    afaik werden keine Threads der Applikation mehr ausgeführt, sobald die Applikation in den Hintergrund verschwindet.
    Damit eine Applikation im Background weiter läuft, muss dies in der der Info.plist mit UIBackgroundModes angemeldet werden.
    Dies dient aber nur für folgende Typen: audio, location, voip
    Siehe: http://developer.apple.com/library/ios/#documentation/iPhone...

    Olaf
  • Daniel Kropf
    Daniel Kropf    Premium Member
    The company name is only visible to registered members.
    Re^2: Problem mit Scheduled Notification
    Hallo Olaf

    Danke für deine Antwort, welche mir zeigt, dass ich mich völlig unverständlich ausgedrückt habe :-)

    Wahrscheinlich ist mein Ansatz völlig falsch, deshalb beschreibe ich jetzt mal das Grundkonzept ohne in technische Details meines Implementationsversuches zu gehen:

    Eine Kalenderapplikation (Beispiel aus dem Shop: miCal) erlaubt dem Benutzer per Einstellung zu wählen, ob der Tag des Monats (1-31) als Badge auf dem Icon angezeigt werden soll. Falls die App beim Tageswechsel um Mitternacht nicht läuft (was ja meist der Fall sein dürfte) soll aber dennoch die Zahl im Badge entsprechend angepasst werden (und wird auch im Falle von miCal).

    Wie haben die das wohl gelöst, bzw. wie löse ich das am Besten bei meiner App?

    Gruss und viel Spass
    Daniel
  • Post visible to registered members
  • Daniel Kropf
    Daniel Kropf    Premium Member
    The company name is only visible to registered members.
    Re^4: Problem mit Scheduled Notification
    Hallo Tanja

    Herzlichen Dank für deine Antwort.


    hast Du in der Notification überhaupt die Aktion definiert, die ausgeführt werden soll?
    In Deinem Post sehe ich bei der Notification oben nur ein Datum, aber keine AlertAction?

    alertAction, alertBody, etc. definieren nach meinem Verständnis ja nur die Texte, welche im Hinweisfenster angezeigt werden sollen. Ich will aber keinen Hinweis, sondern bloss den Badge aktualisieren.


    Kann es sein, dass Deine Implementierung schon funktioniert, aber der angezeigte Wert einfach dem aktuellen entspricht?
    Leider nicht, da das ja genau das wäre, was ich mir wünsche... Wenn ich am Vortag die App starte und beende, dann ist im Badge die aktuelle Zahl (z.B. 3) und am nächsten Morgen ist immer noch dieselbe Zahl drin (also wiederum z.B. 3) statt die aktuelle (im Beispiel jetzt eben 4).

    Aber dennoch herzlichen Dank für deine beiden Hinweise, werde mal schauen, ob zumindest etwas passiert wenn ich mir doch ein Hinweisfenster anzeigen lasse...

    Gruss und viel Spass
    Daniel
  • Post visible to registered members
  • Horst Thanbichler
    Horst Thanbichler
    The company name is only visible to registered members.
    Re^6: Problem mit Scheduled Notification
    Hallo Daniel,

    wäre Dir dankbar, wenn Du kurz schreiben könntest, wie Du es nun gelöst hast. Habe nämlich aktuell das gleiche Problem (und wie Du das gleiche Verständnis von den Alerts).

    Danke & Gruß
    Horst