我有一个shell脚本,它将一个数字列表(1,2,依此类推,每行一个)记录到日志文件中。我需要我的ObjC应用程序每隔X秒读取一次日志文件,然后根据日志文件中记录的最后一个数字相应地更新我的进度条。
最好的方法是什么?
答案 0 :(得分:4)
为什么不使用NSFileHandle的readInBackgroundAndNotify
呢?这样,只有在文件中确实发生了某些事情时才会运行代码。
答案 1 :(得分:0)
您可以创建一个NSTimer实例,并且每隔X秒调用一次,它会调用另一个负责读取文件和更新进度条的方法。该方法可以使用NSString的stringWithContentsOfFile:
将文件读入字符串,然后适当地解析它。
例如:
// 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];
稍后,您定义选择器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
}
如果您需要明确的停留点,可以将timer
存储在班级内的ivar中,然后只要[timer invalidate];
内的解析代码确定您已完成任何操作,就会调用read
你正在执行的过程。
相关文档:
scheduledTimerWithTimeInterval:invocation:repeats:
invocationWithMethodSignature:
methodSignatureForSelector: