Frage

ich mit einem Webservice kommuniziere einen numerischen Wert abzurufen, die als NSString in meiner Funktion kommt. Diese Zahl sagt mir die genaue Höhe der Zeit zu warten, bis ich eine andere Aktion durchführen, und es ist wichtig, dass es genau sein.

Als Beispiel wenn die Zeichenfolge „89283“, dann bedeutet dies, ich 89,283 Sekunden warten muss. So würde Ich mag die beste Art und Weise in Objective-C wissen, für iPhone diese Zeichenfolge auf einen genauen Wert zu konvertieren, die ich in den perform passieren kann: afterDelay: Funktion. Hier ist mein Beispielcode, aber ich vermute, es ist nicht korrekt.

NSString *myDelayString = @"89283";
int myDelay = [myDelayString intValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];

Ich denke, der myDelay Wert wirklich ein NSTimeInterval sein sollte, aber ich bin nicht sicher, wie dass ich von der Saite zu machen. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Hier ist der Code, mit Änderungen doppelte Genauigkeit zu ermöglichen.

NSString *myDelayString = @"89283";
NSTimeInterval myDelay = [myDelayString doubleValue]/1000;
[self performSelector:@selector(myFunction) withObject:nil afterDelay:myDelay];

Verwenden double um die Zeichenfolge als Doppel zu erhalten, so dass Sie Integer-Division zu vermeiden. NSTimeInterval des Typ ist definiert als Doppel auf dem iPhone, so dass Sie in das Doppel Ergebnis speichern und es dann passieren, um die afterDelay. Teil des Wählers

Andere Tipps

NSTimeInterval ist eine doppelte, und du bist Integer-Division zu tun. Ändern Sie einfach seine Art von int zu double und Sie sollten gut sein.

Delays laufen Loops, wie Sie sind, oder mit NSTimer sind sehr ungenau, weil Sie immer für die Vorveranstaltung vollständig verarbeitet werden warten müssen. Bei der Ausführung, seinen Code 100ms laufen könnte oder später mehr als erwartet.

So trotz Ihrer hohen Präzision wird die Genauigkeit wahrscheinlich fehlt ernst werden.

Je nachdem, warum Sie dieses präzise Timing benötigen, können Sie in der Lage sein, Änderungen an Ihre Berechnungen zu machen und die Differenz strittig machen.

Sie haben nicht genug rep einfach einen Kommentar hinzufügen, aber stellen Sie sicher, wenn Sie myDelay konvertieren zu schweben, dass Sie von 100,0 teilen sonst werden Sie nicht bekommen, was Sie erwarten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top