Bestimmte Uhrzeit - Bestimmte Aktion

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Richtig.

    Siehe hier für mehr Infos:
    developer.apple.com/library/io…oc/uid/TP40008194-CH1-SW1

    Bei einer Local Notification wird deine App aber nicht zwangsweise gestartet.
    Ist somit die Frage was du realisieren willst.

    Dem User um 18:00 ein Popup per Local Notification zeigen geht.
    Darauf zu bauen, dass er in jedem Fall die Notification anklickt statt sie zu ignorieren aber nicht.

    Gewährleisten, dass du eigenen Code um 18:00 ausführen darfst, kannst du dadurch also nicht.
  • Also bei mir ist es folgendermaßen:

    Code:
    NSLog(@"settingstart");
    UILocalNotification *localNote = [[UILocalNotification alloc]init];

    localNote.alertAction = @"App öffnen";
    localNote.alertBody = @"Möchtest du nicht eine Eingabe zum heutigen Tag geben?";
    localNote.repeatInterval = 0;
    localNote.soundName = UILocalNotificationDefaultSoundName;
    localNote.timeZone = [NSTimeZone defaultTimeZone];
    localNote.applicationIconBadgeNumber = 1;
    NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setHour:11];
    [components setMinute:54];
    [components setSecond:10];
    localNote.fireDate = [gregorian dateFromComponents:components];

    [application scheduleLocalNotification:localNote];

    NSLog(@"ready");
    Die Logs sind nur zur Sicherheit da, damit ich weiß, dass alles läuft, und die sind auch da. Um 11:54:10 kommt keine Nachricht. Erst wenn ich die App starte und sie dann in den Background schicke krieg ich die Msg. Hab ich was falsch oder ist das richtig so?

    PS: Ich schließe die App direkt nachdem ich den Log "Ready" sehe.
    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen.

    Albert Einstein
  • Du musst deinen Components aber auch den Tag, Monat... sagen! Wenn du es am aktuellen Tag machen willst, dann verwende einfach [[NSDate date] day]... sowie ich es auch im Codeschnippsel gemacht habe. [NSDate date] gibt dir immer das aktuelle Datum, und davon "nimmst" du dir sozusagen den Tag, den Monat, das Jahr, und manipulierst via Components die Uhrzeit.
    Oder funktioniert es bei dir so?
  • Da steht dann aber bei mir ein Fehler, nämlich:
    "No visible @interface declares the selector 'year'" (usw).

    Was mach ich dann (genauer Code folgt jetzt):
    NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setYear:[[NSDate date]year]];
    [components setMonth:[[NSDate date] month]];
    [components setDay:[[NSDate date] day]];
    [components setHour:18];
    [components setMinute:0];
    [components setSecond:0];

    UILocalNotification *makeChangeRememberNote = [[UILocalNotification alloc]init];
    makeChangeRememberNote.alertAction = @"Eingabe tätigen";
    makeChangeRememberNote.alertBody = @"Hi! Möchtest du nicht eine Bewertung durchführen?";
    makeChangeRememberNote.fireDate = [gregorian dateFromComponents:components];
    makeChangeRememberNote.repeatInterval = 0;
    makeChangeRememberNote.soundName = UILocalNotificationDefaultSoundName;
    makeChangeRememberNote.timeZone = [NSTimeZone defaultTimeZone];


    LG
    electrofreak
    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen.

    Albert Einstein
  • Ja da fehl noch eine Kleinigkeit.
    Du kannst ein NSDate nicht direkt nach Jahr, Tag Monat etc. fragen.
    Du musst Mittels NSCalendar die NSDateComponents aus dem NSDate ziehen.

    Etwa so:

    Quellcode

    1. NSDateComponents *currentComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];


    Aus den components bekommst du dann die Infos wie Jahr, Monat etc.
  • Noe das leigt einfach daran, dass es immer nur eine begrenzte Anzahl Push Server bei Apple gibt. Da es aber nicht immer zu jeder Zeit gleich viele NAchrichten gibt sind die manchmal unter und manchmal eben auch überlastet. Dann dauert es ein wenig länger. Und nur um in den Stoßzeiten dafür zu srogen, dass die Push Nachrichten direkt durchkommen, etliche zusätzliche Server anzuschaffen wird Apple wohl kaum machen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)