0

xcode プロジェクト (iOS ではなく Mac OS X) で NSProgressIndicator を使用しています。進行状況インジケーターにダウンロードの進行状況を表示しながら、ファイルの非同期ダウンロードを実行しようとしています。私のプロジェクトでは、更新ボタンをクリックするとダウンロードが開始されます。データを受信するたびに進行状況が更新され、アプリ デリゲートの update_progress メソッドが呼び出されます。

NSLogs からわかるように、進行状況の値がそのメソッドに渡されます。この値で進行状況インジケータに setDoubleValue を使用しても効果はありません。ただし、静的な値 (setDoubleValue:50.0f など) を使用すると、進行状況インジケーターが更新されます。

.m では、loadData メソッドがダウンロードを開始します。ここで、ファイルを保存する場所 (self.strFileNameWithPath) を設定し、その数行下にファイルのダウンロード元の場所を設定できます。私はちょうど 2.5 MB のファイルを使用しています。小さいですが、いくつかのダウンロード手順を実行するには十分な大きさです。

インターフェースで、「更新」ボタンをクリックしてダウンロードを開始します。チャンクが受信されると、コンソールに進行状況の更新が表示されます。

なぜこれが起こっているのか、どうすれば修正できるのか、誰かが知っていますか? 前もって感謝します!

編集:矛盾のある方法は次のとおりです。

- (void)update_progress:(float)value{
    double thevalue = (double)value;
    NSLog(@"value: %f",thevalue);
    [self.progress_indicator setDoubleValue:thevalue];
    NSLog(@"Prgoress: %f",[self.progress_indicator doubleValue]);
}

各進捗ステップで、value は正しい進捗値を示しますが、2 番目の NSLog が 0.0 を返すため、進捗インジケータは setDoubleValue に反応しません。

以下は、コンソールに表示される内容です。

value: 2.770802
Prgoress: 0.000000
value: 22.662386
Prgoress: 0.000000
value: 69.881004
Prgoress: 0.000000
4

1 に答える 1

0

問題は私の init メソッドでした。ダウンローダの実装で次のように修正しました。

- (id)init{
    self = [super init];

    if (self) {
        appdelegate = [[NSApplication sharedApplication] delegate];
    }

    return self;
}

何かを試すための簡単なコーディングについては、私はばかげていると感じています...

于 2013-06-23T11:59:35.397 に答える