Reset Funktion nach X Tagen

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

  • Reset Funktion nach X Tagen

    Hallo,

    ja ich bin ein echter Anfänger, der Spaß daran hat mit iPhone und Xcode rumzuspielen... das nur so zum Anfang! :) :)


    So nun zu meinem eigentlichen Problem, wofür ich eine Lösung suche... ich denke das ist für Profis Lächerlich... ich suche schon eine weile nach einer Lösung!

    und zwar habe ich mir ne App geschrieben mit der ich mir dinge einfach markieren kann wenn ich sie erledigt habe, hab ich alles erledigt kann ich über einen Button die ganzen Markierungen wieder Löschen und somit wieder von neuem Markieren!

    nun möchte ich aber das das Reset/Löschen der Markierungen automatisch geht.

    das heist ich möchte mir einen Referenz tag festlegen, sagen wir Montag 8:00 Uhr, starte ich nun Montag 9:00 Uhr oder Mittwoch egal welche zeit meine App dann soll evtl ein Alert aufgehen das fragt ob ich löschen will oder nicht!

    und nach dem löschen oder eben nicht Montag 8:00 uhr wieder als Ausgangspunkt festlegt...

    evtl hat jemand von den Profis eine Idee oder ein kleines Sample/Link zu einem !!


    Danke schon mal für eure evtl. Hilfe
    Gruß Jürgen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von merlin2105 ()

  • Hallo,

    vor kurzer Zeit wurde hier das Gleiche nur anders gefragt ;)
    NSDate ist Dein Freund…

    Du merkst Dir einfach den Zeitpunkt an dem die Liste oder der jeweilige Eintrag markiert wurde.
    Beim Starten der Anwendung kannst Du dann die Einträge durchlaufen und nach der Zeitdifferenz ermitteln.
    Wird irgend ein Schwellwert erreicht, dann zeigst Du Deinen Dialog.

    Im Prinzip sehr leicht zu implementieren.
    Das wirst Du gut umsetzen können, wenn Du Dich mit NSDate und dessen Möglichkeiten vertraut machst.

    Viele Grüße
  • ok... das es für erfahrene Programmierer kein Problem ist wusste ich ja, und das es evtl so in der Richtung machbar ist wie du es beschrieben hast...

    nur wie gesagt als Anfänger tut man sich manchmal mit dem Anfang am schwersten!...

    ich habe keine Ahnung wie ich das anfangen könnte... hast du evtl einen link zu dem anderen betrag wo das selbe gefragt wurde, vielleicht gibts da etwas was mir weiter hilft!

    Danke
  • so nach langem google hab ich folgendes gefunden:

    Quellcode

    1. NSDate *today = [NSDate date];
    2. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    3. [gregorian setLocale:[NSLocale currentLocale]];
    4. NSDateComponents *nowComponents = [gregorian components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];
    5. [nowComponents setWeekday:2]; //Montag
    6. [nowComponents setWeek: [nowComponents week] + 1]; //Next week
    7. [nowComponents setHour:8]; //8 Uhr
    8. [nowComponents setMinute:0];
    9. [nowComponents setSecond:0];
    10. NSDate *resetTag = [gregorian dateFromComponents:nowComponents];


    wenn ich mit :

    Quellcode

    1. NSLog(@"tag: %@",resetTag);


    mir das Ergebnis zeigen lasse dann hab ich schon einmal den tag und die Uhrzeit für das Ereignis

    in diesem fall: 2015-03-09 07:00:00 +0000

    jetzt bräuchte ich doch eigentlich nur noch einen countdown von der aktuellen zeit bis zu dieser ziel zeit,
    ist der countdown beim starten dann bei 0 könnte ich das Alert auslösen!

    wie kann ich jetzt diesen countdown zb. in Tage:std:min in einem label anzeigen ... und dann wenn auf 0 das Alert auslösen und den countdown zu der ziel zeit wieder von vorne starten...

    oder wäre das quatsch so zu machen!
  • merlin2105 schrieb:

    jetzt bräuchte ich doch eigentlich nur noch einen countdown von der aktuellen zeit bis zu dieser ziel zeit, ist der countdown beim starten dann bei 0 könnte ich das Alert auslösen!

    Na, fast. Eigentlich interessiert Dich die Zeitspanne, die zwischen dem aktuellen Zeitpunkt und dem Zeitstempel eines Listeneintrags liegt. Wenn diese negativ ist (je nach Reihenfolge der Operanden), ist das Ereignis veraltet und ein Kandidat zum Löschen.

    Das Stichwort "NSDate" hast Du ja schon verwendet, nun schau mal in dessen Methoden, da gibt es so etwas wie "timeIntervalSinceDate:"...

    Wenn Du nur beim Programmstart prüfen willst, bist Du damit schon fast am Ziel, für ein periodisches Überprüfen schau Dir mal die Klasse NSTimer an.

    HTH, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • hab das ganze jetzt noch ein wenig erweitert mit dem Ergebnis das mir in meinem Label die zeit in Std:Min:Sec angezeigt wird!

    jetzt kämpfe ich gerade damit mir noch die Tage anzeigen zu lassen... ich weis is bestimmt voll einfach :)

    so nachdem ich das wirklich nur brauche wenn ich die App starte kann ich ja denk ich mal sogar damit arbeiten... wenn mein countdown auf 0 wäre.... aber wenn ich nach dieser zeit die app starte ist der countdown ja schon wieder gestartet!

    hmmmm doch ganz schön kompliziert...

    Quellcode

    1. NSDate *today = [NSDate date];
    2. NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    3. [gregorian setLocale:[NSLocale currentLocale]];
    4. NSDateComponents *nowComponents = [gregorian components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];
    5. [nowComponents setWeekday:2]; //Montag
    6. [nowComponents setWeek: [nowComponents week] + 1]; //Next week
    7. NSDateFormatter *df = [[NSDateFormatter alloc] init];
    8. [df setDateFormat:@"dd-MM-YYYY HH:mm:ss"];
    9. NSDate *date1 = today;
    10. NSDate *date2 = resetTime;
    11. NSTimeInterval interval = [date2 timeIntervalSinceDate:date1];
    12. int hours = (int)interval / 3600;
    13. int minutes = (interval - (hours*3600)) / 60;
    14. int seconds = (interval - (hours*3600) - (minutes*60));
    15. NSString *timeDiff = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
    16. _showTimer.text = [NSString stringWithFormat:@"%@",timeDiff];
    Alles anzeigen
  • merlin2105 schrieb:

    aber wenn ich nach dieser zeit die app starte ist der countdown ja schon wieder gestartet!

    Ääähhhh ... nein! Wenn Du das Intervall wie oben bestimmst, wird es negativ, wenn die resetTime erreicht wurde ... das ändert sich auch nicht, wenn diese Abfrage mehrmals oder später durchgeführt wird. Wie kommst Du darauf, dass irgendein "Countdown" gestartet würde?

    Verwirrt, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • im viewDidLoad

    lass ich alle sec resetTimer ausführen, somit wird mir im Label _showTimer alle sec die zeit in std:min:sec angezeigt ausgehen von dem gesetzten Datum... das funktioniert ja schon:

    ich weis das ich bestimmt extrem umständlich hier vorgehe... bin ziemlicher Anfänger :)

    Quellcode

    1. ​[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(resetTimer:) userInfo:nil repeats:YES];
  • Das war ja aus dem bisher geposteten Code nicht zu erkennen. Überlege Dir selber, was Du machen willst: Ich würde (wenn die Zeitdifferenz negativ ist) in dem Label so etwas wie "überfällig" anzeigen, vielleicht auch mit der Ergänzung, wie lange. Dann ein Hinweis beim App-Start mit der Option, überfällige Einträge zu entfernen (nicht innerhalb des Timers, der nur für die Aktualisierung der Anzeige sorgt). Das Problem des häufiger laufenden berechneten Zeitintervalls sehe ich nicht.

    Aber letztlich muss Du Dir in kleinen Schritten darüber klar werden, was Deine App in welcher Situation genau machen soll. Das ganze dann in Code zu fassen, ist erst einmal zweitrangig...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Guten morgen,

    ich habe nun noch einigen anpassungen folgendes geschafft!

    in einem Label wird mir nun die restzeit in Tage:Std:Min bis zu dem gesetzten ziel tag angezeigt hier im beispiel eben montag 8:00 uhr,

    gleichzeitig errechne ich mir diese Tage /std/min in sekunden um nur einen wert zu haben!

    wäre es jetzt nicht am einfachsten wenn ich mir mit diesem einzel wert einen Timer starte, dieser läuft dann ja irgendwann ab und steht bei 0 , starte ich nun meine app der timer ist bei 0 kann ich das Alert/reset auslösen!

    ich habe schon ein wenig damit weiter gemacht, nur bekomme ich das nicht so recht hin, wie setzt ich mir einen timer mit zb 86400 sec was ja einem Tag entspricht so das er auch wenn die app geschlossen wird nach dem starten wieder weiter läuft!... dann müsste ich den Timer nach dem Reset ja einfach mit den aktuell verbleibenten sec bis zur ziel Zeit wieder neu starten!