2009-08-23 9 views
1

ログファイルに数字のリスト(1行、2行、1行に1つずつ)を記録するシェルスクリプトがあります。 ObjCアプリケーションでログファイルをX秒ごとに読み込み、最後にログファイルに記録された番号に基づいて進行状況バーを更新する必要があります。シェルスクリプトからライブ出力を読み込み、進行状況バーを更新する

これを行うにはどうすればよいですか?

答えて

4

代わりに?この方法では、ファイル内で実際に何かが起きたときにのみコードが実行されます。

+0

私はreadDataInBackgroundAndNotifyと呼ばれる方法を見つけることができませんでしたが、私はreadInBackgroundAndNotifyを見つけたことを試してみましょう。私はこのコードを試した:http://pastie.org/592668とセレクタは何らかの理由で呼び出されることはありません。私はファイルが更新されていることを確認しています。何か案は? – indragie

+0

まず、間違った通知名を登録しています。 '@" NSFileHandleReadCompletionNotification "ではなく、' NSFileHandleReadCompletionNotification'を監視する必要があります。次に、ファイルハンドルのファイルディスクリプタを 'fcntl'を使用して非ブロックとして設定してみてください。 http://developer.apple.com/documentation/Darwin/Reference/ManPages/man2/fcntl.2.htmlを参照してください。ポーリングを必要としない方法見つけるための –

+1

1 - 私自身の答えよりもはるかに優れ:)を – Tim

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 
}

あなたは明確な停止点が必要な場合は、あなたがあなたのクラスの内部IVARにtimerを格納することができ、その後、実行中のプロセスが完了したと判断した場合は、内の解析コードを使用すると、いつでも[timer invalidate];が呼び出されます。

関連ドキュメント:

  • NSTimerscheduledTimerWithTimeInterval:invocation:repeats:
  • NSInvocationinvocationWithMethodSignature:
  • NSObjectmethodSignatureForSelector: NSFileHandleのを使用しないのはなぜ
  • NSString
+0

答えてくれてありがとう、私は – indragie

関連する問題