ファイルをコピーしたり、サファリとクロームを使用してファイルをダウンロードしたりすると、ファイルのアイコンにミニプログレスバーが表示されます。
自分のコードでファイルをコピーまたはダウンロードするときに、Finderウィンドウに表示させる方法を考えています。
誰かが私を助けてもらえますか?
どうもありがとう。
ファイルをコピーしたり、サファリとクロームを使用してファイルをダウンロードしたりすると、ファイルのアイコンにミニプログレスバーが表示されます。
自分のコードでファイルをコピーまたはダウンロードするときに、Finderウィンドウに表示させる方法を考えています。
誰かが私を助けてもらえますか?
どうもありがとう。
私は自分でファイル/ディレクトリ属性を照会することで道を得ました。至ってシンプルです。
アイコンに進行状況バーを表示するファイルの属性を取得します
NSDictionary *fileAttr = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
拡張属性を取得する
NSDictionary *extendAttr = [fileAttr objectForKey:@"NSFileExtendedAttributes"];
extendAttr の Mutable コピーを作成し、その中のいくつかの値を変更します
NSMutableDictionary *mutableExtendAttr = [NSMutableDictionary dictionaryWithDictionary:extendAttr];
// create data of progress value
NSData *progressData = [@"0.1" dataUsingEncoding:NSASCIIStringEncoding];
// change it
[mutableExtendAttr setObject:progressData forKey:@"com.apple.progress.fractionCompleted"];
fileAttr の変更可能なコピーを作成する
NSMutableDictionary *mutableFileAttr = [NSMutableDictionary dictionaryWithDictionary:fileAttr];
// change extend attr
[mutableFileAttr setObject:[NSDictionary dictionaryWithDictionary:mutableExtendAttr] forKey:extendAttrKey];
// change file/dir create date to the special one
// if not , progress bar will not show
[mutableFileAttr setObject:[NSDate dateWithString:@"1984-01-24 08:00:00 +0000"] forKey:NSFileCreationDate];
// set attribute to file
[[NSFileManager defaultManager] setAttributes:mutableFileAttr ofItemAtPath:filePath error:&error];
これで、進行状況バーが表示されたことがわかります。
1 つの出発点は、 を使用することNSProgressIndicator
です[progressIndicator setIndeterminate:NO];
。更新/バックグラウンド操作がメイン スレッドをブロックしないようにする必要があります。NSProgressIndicator
AppKit ウィジェットの場合は少し異なります。セカンダリ スレッドからの更新を許可します。もちろん、「現在の進行状況」の更新も、メイン スレッドの実行ループでキューに入れられます。