2010-07-30 6 views
3

J'ai une classe Delegate qui gère les réponses de CLLocationManager et les imprime via printf(). Y a-t-il un type de boucle occupée que je peux mettre dans main() pour que le programme reste ouvert et garde CLLocationManager connecté à Delegate en traitant avec bonheur les événements?Dans une application CLI Cocoa, comment implémenter une boucle d'événements?

#import <Foundation/Foundation.h> 
#import "Delegate.h" 
#import <CoreLocation/CoreLocation.h> 

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    Delegate *del = [Delegate alloc]; 

    CLLocationManager *locationManager; 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = del; 
    [locationManager startUpdatingLocation]; 

    // Something goes here 

    [pool drain]; 
    return 0; 
} 
+0

Si 'CLLocationManager' exécute ses trucs sympas sur un autre thread et que vous avez juste besoin de quelque chose pour garder votre programme actif, vous pouvez utiliser' NSApplicationMain (argc, argv) 'ou' dispatch_main() '(from '), à votre convenance. Bien que 'dispatch_main' ne revienne jamais, il n'y a aucune chance que' [pool drain] 'soit appelé. – zneak

+0

Blessé en utilisant NSRunLoop * runLoop = [NSRunLoop currentRunLoop]; [runLoop run]; –

Répondre

2

C'est ce que NSRunLoop est pour, et CLLocationManager est explicitement documenté comme nécessitant une (recherche de « boucle d'exécution » sur cette page), c'est ce que vous devez faire: Exécutez la boucle d'exécution.

+0

Salut Peter, j'ai essayé 'NSRunLoop' mais il n'a pas fonctionné pour moi, je suis tout nouveau à écrire des applications C++, s'il vous plaît voir - http://stackoverflow.com/questions/39704702/creating-a-main-event -loop-pour-raccourcis-etc – Noitidart

Questions connexes