6

ファイルをコピーしたり、サファリとクロームを使用してファイルをダウンロードしたりすると、ファイルのアイコンにミニプログレスバーが表示されます。

自分のコードでファイルをコピーまたはダウンロードするときに、Finderウィンドウに表示させる方法を考えています。

誰かが私を助けてもらえますか?

どうもありがとう。

4

2 に答える 2

15

私は自分でファイル/ディレクトリ属性を照会することで道を得ました。至ってシンプルです。

アイコンに進行状況バーを表示するファイルの属性を取得します

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];

これで、進行状況バーが表示されたことがわかります。

于 2013-02-27T13:01:50.083 に答える
0

1 つの出発点は、 を使用することNSProgressIndicatorです[progressIndicator setIndeterminate:NO];。更新/バックグラウンド操作がメイン スレッドをブロックしないようにする必要があります。NSProgressIndicatorAppKit ウィジェットの場合は少し異なります。セカンダリ スレッドからの更新を許可します。もちろん、「現在の進行状況」の更新も、メイン スレッドの実行ループでキューに入れられます。

于 2013-02-22T10:08:00.593 に答える