Domanda

Ho un'interfaccia di cacao che utilizza la trama principale. Quando premo un pulsante nell'interfaccia, viene disegnata una trama. Volevo creare una sequenza di grafici chiamando il metodo di stampa più volte insieme a chiamate a sleep () in mezzo. Ma sembra che anche se viene fatta la chiamata per ricaricare i dati che non accade nulla fino alla chiusura della funzione (mostrando solo l'ultimo grafico). Ora so che esiste CPAnimation ma prima di iniziare a usarlo mi chiedevo cosa succede quando esce la funzione che aggiorna il grafico. Dovrei cedere al thread che si occupa del rinfrescante invece di usare lo sleep?

È stato utile?

Soluzione

Ok, ho capito come. Ho chiamato il metodo reloadData da un metodo in un thread separato (che restituisce sempre). Questo si riduce a chiamare reloadData da un IBAction e anche con un NSTimer. Infine invece di usare sleep userò NSConditionLock per coordinare l'elaborazione e l'aggiornamento

Altri suggerimenti

Presumibilmente, Core Plot (o il tuo codice) imposta la vista come visualizzazione necessaria. Ciò non accade immediatamente; succede quando torni al loop degli eventi.

Ogni volta che usi sleep in un'applicazione Mac OS X, uccidi un cucciolo. Utilizzare invece NSTimer. Chiedi al tuo metodo di callback del timer di eseguire il lavoro richiesto per un grafico e imposta tutte le variabili di istanza necessarie affinché il tuo metodo sappia quale grafico deve disegnare, in modo che il metodo disegni ogni grafico a turno finché non si esaurisce.

O, meglio ancora, presentare un elenco di grafici tra cui l'utente può scegliere, invece di far vedere all'utente tutti i grafici come una presentazione. (A meno che una presentazione con etichetta esplicita sia ciò che stai implementando.)

Core Plot, come la maggior parte dei framework di disegno Cocoa, è pigro: disegna alla fine dell'iterazione del ciclo di esecuzione. Questo per garantire che le cose non vengano disegnate troppo spesso.

Invece di disegnare immediatamente, i livelli sono contrassegnati come da disegnare.

Come è stato sottolineato da altri, un approccio migliore alla modalità di sospensione è utilizzare NSTimer per evitare di bloccare il ciclo di esecuzione o utilizzare metodi NSObject come performSelector: withObject: afterDelay:

Peter ha ragione: il metodo di ricarica dei dati in realtà non disegna nulla. La trama viene contrassegnata come necessitante visualizzazione e aggiornata la volta successiva che i livelli vengono disegnati sullo schermo. Se usi sleep , non ha mai la possibilità di disegnare.

Nota anche che Core Plot è un progetto abbastanza giovane; CPAnimation e le relative classi sono stub. Non fanno ancora davvero niente. : -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top