2009-07-20 30 views
2

Ich frage mich, ob es gibt eine Möglichkeit, eine Funktion in Cocoa jede Minute auszuführen. Ich persönlich werde das zum Speichern von Inhalten verwenden, wie der Benutzer es eingibt, falls sie aufhören sollten - aber ich habe gesehen, dass dieser Effekt auch in Twitter-Clients verwendet wird. Wenn der Benutzer das Fenster geöffnet hält, wird es alle x Minuten ohne Eingabe des Benutzers automatisch aktualisiert. Es scheint, als ob das üblich ist, und die Sprache erlaubt es, ich kann einfach keine Dokumentation darüber finden.Ausführen von Funktion jede Minute in Kakao

Danke für jede Hilfe!

Antwort

6

Ich persönlich benutze dies zum Speichern von Inhalten, wie der Benutzer es eingibt, falls sie aufhören - Aber ich habe diesen Effekt auch in Twitter-Clients verwendet.

Eine bessere Lösung wäre der Text nach Ansicht der Delegierten zu sein und reagieren auf textDidChange: durch die Schaffung der nicht wiederholende Timer (wenn Sie nicht bereits getan haben oder es bereits gefeuert) und sein Feuer Datum einstellen bis X Sekunden in der Zukunft. Dann verliert der Benutzer nicht mehr als X Sekunden Arbeit, nicht bis zu einer Minute, und der Timer wird nicht ausgelöst, wenn der Benutzer nichts eingegeben hat.

+0

Hey Peter: Ich werde auf jeden Fall in das schauen. – PF1

+0

Peter: Das scheint sehr gut zu funktionieren, aber es verursacht viel Zeit bei der Texteingabe. Ich glaube, das liegt daran, dass die Datei bei jeder Ausführung der Funktion auf der Festplatte gespeichert wird. Ich habe den Timer für diese Funktion nicht implementiert, da ich nicht wusste, wie man dafür sorgt, dass bei jedem Lauf der Funktion kein neuer Timer erstellt wird. Ich stelle mir vor, dass dies mein Problem lösen würde, aber ich bin nicht ganz sicher, wie ich das erreichen soll. Irgendwelche Ideen? – PF1

+1

Wenn der Timer ausgelöst wird, lassen Sie ihn los (wenn Sie ihn früher beibehalten haben) und setzen Sie die Variable auf "Null". Dann können Sie in 'textDidChange: 'testen, ob der Timer existiert oder nicht. Rufen Sie die Funktion auch nicht (oder senden Sie die Nachricht) direkt aus 'textDidChange:'; Erstellen Sie einfach den Timer und lassen Sie die Nachricht senden, wenn sie ausgelöst wird. –

2

Überprüfen Sie die NSTimer docs. Es macht genau das, was du willst. Sie erstellen einen NSTimer, der so lange wiederholt wird, wie Sie möchten, und rufen eine bestimmte Funktion mit den angegebenen Argumenten auf.

+0

Hey Dan: Also das ist, was NSTimer ist. Ich habe mir diese Klasse vorher angeschaut, wusste aber nicht genau, dass Sie sie für Funktionen verwenden könnten. Danke für Ihre Hilfe. – PF1

+1

NSTimer kann eine Funktion nicht direkt aufrufen; Es kann nur eine Nachricht an ein Objekt senden. Ihre Antwort auf diese Nachricht kann beliebig sein, einschließlich des Aufrufs einer Funktion. Das heißt, ich kann mir keinen Grund vorstellen, warum Sie dies zu einer Funktion machen würden; Sie würden eher die automatische Speicherung in der Methode tun. –

2

Ich persönlich werde, sei dies mit für Spar Inhalt während der Benutzer tippt es in Fall verlassen sie

Dann möchten Sie autosaving, die für Sie übernimmt.

+0

@Graham Lee Würde das funktionieren, obwohl meine NSTextFields dynamisch auf dem Bildschirm hinzugefügt wurden? – PF1

+0

Wenn der Text, den sie darstellen, Teil des Dokumentmodells ist, dann ja. –