Vous pouvez créer une instance de NSTimer et la faire appel, toutes les X secondes, à une autre méthode chargée de lire le fichier et de mettre à jour votre barre de progression. Cette méthode peut utiliser le stringWithContentsOfFile:
de NSString pour lire le fichier dans une chaîne, puis l'analyser de manière appropriée.
Par exemple:
// Create the invocation of the method to call
NSUInteger X = 2; // Change depending on how often you want the timer fired
NSMethodSignature *signature = [self methodSignatureForSelector:@selector(read)];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
// Create the timer, adding it to the default run loop
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:X
invocation:invocation
repeats:YES];
Et plus tard, vous définissez le sélecteur read
:
- (void)read {
NSString *fileContents = [NSString stringWithContentsOfFile:@"aFile.txt"];
NSArray *lines = [fileContents componentsSeparatedByString:@"\n"];
NSString *lastLine = [lines lastObject];
// Your own parsing and updating code here
}
Si vous avez besoin d'un point d'arrêt définitif, vous pouvez stocker timer
dans un Ivar dans votre classe, puis appelez [timer invalidate];
chaque fois que votre code d'analyse à l'intérieur read
détermine que vous avez terminé avec le processus que vous exécutez.
docs pertinents:
Je ne pouvais pas trouver une méthode appelée readDataInBackgroundAndNotify, mais j'ai trouvé readInBackgroundAndNotify. J'ai essayé ce code: http://pastie.org/592668 et le sélecteur n'est jamais appelé pour une raison quelconque. Je sais à coup sûr que le fichier est en cours de mise à jour. Des idées? – indragie
Tout d'abord, vous vous inscrivez pour le mauvais nom de notification. Vous devez observer pour 'NSFileHandleReadCompletionNotification', pas' @ "NSFileHandleReadCompletionNotification" '. Ensuite, essayez de définir le descripteur de fichier du descripteur de fichier comme non bloquant en utilisant 'fcntl'. Voir http://developer.apple.com/documentation/Darwin/Reference/ManPages/man2/fcntl.2.html. –
+1 pour trouver une méthode qui n'a pas besoin d'interroger - beaucoup mieux que ma propre réponse :) – Tim