問題タブ [nsprogress]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - ネストされた NSOperations で NSProgress を使用する
調査NSProgress
してきましたが、既存のドキュメント、クラス リファレンス、およびチュートリアルが不足していることがわかりました。私の NSProgress が私のユースケースに適用できるかどうかは主に疑問です。クラス リファレンス ドキュメントではsuboperations
orsubtasks
を代わりに参照していますが、間違っているかもしれませんがsuboperations
、NSOperation が other のグループを管理する場合を意味すると解釈しましたNSOperations
。私のユースケースの例は次のとおりです。
Upload All Items in Group
存在するグループごとに操作を作成します。- これらの各操作を に追加し
NSOperationQueue
ます。 - 各操作は、グループ内の各アイテム
Upload All Items in Group
の操作を作成します。Upload Item
これらはすべてNSOperationQueue
、オペレーションによって管理される に追加されます。
NSProgress
私はこれをサポートし、ネストされた操作 (Upload Item
操作) から親操作に、そして最後にメイン スレッドと UI に進行状況を伝達できるようにすることを期待していました。しかし、私はこれを実装するのに苦労しましNSProgress
た.1つのバックグラウンドスレッドですべてのコードを実行する長い操作を意図しているようですが、進行状況がいつ行われたかを簡単に判断できる個別の「セクション」があります。この場合、suboperation
ネストされた の使用を思い起こさせるため、この用語の使用は少し誤解を招きますNSOperations
。
ご協力いただきありがとうございます。さらに詳しい情報が必要な場合はお知らせください。
ios - NSProgress を使用してダウンロード速度と残り時間を確認する
のドキュメントにNSProgress
よると、-[NSProgress localizedAdditionalDescription]
ダウンロード速度と残り時間を報告できることがわかります。
1.61 GB の 3.22 GB (2 KB/秒) — 残り 2 分
NSProgress
ただし、 を に関連付けると、これらの詳細を取得できませんNSURLSessionDownloadTask
。これが私のコードです:
Downloader.h
Downloader.m
ダウンロードObserver.m
これは以下のみを出力します:
0/100
100 バイトのゼロ KB
localizedAdditionalDescription
ダウンロード速度と残り時間を印刷するにはどうすればよいですか?
ios - 子の「サイズ」を事前に知らされていない NSProgress のツリー
これはすでに誰かに発生していると確信していますが、これを解決するための信頼できるソース (Stackoverflow または他の場所) を見つけることができませんでした。
(有限の) 数のファイルをダウンロードする必要があります。ダウンロードする前にサイズがわかりません。それらのサイズは大きく変化する可能性があり、ダウンロードを開始する前にはわかりません。
非常に小さなファイルが 9 つと、非常に大きなファイルが 1 つあることがよくあります。NSProgress
「子」機能を使用すると、非常に迅速に 90% の完了が表示され、最後のファイルがはるかに大きいため、UI がスタックしているように見えます (実際にはそうではありませんが)。
これは、大きなファイルをシミュレートするコードの例です。
becomeCurrentWithPendingUnitCount
ダウンロードを開始する前に重量がわからないために を変更できない場合、どのように対処しますか?
編集:これは私が今のところやっていることです:
まず第一に:私は嘘をつきました。ファイルをダウンロードするのではなく、データベースからデータをダウンロードしますが、結局同じ問題です。
root を作成する前にNSProgress
、バックエンド ( ) から多数のオブジェクトをダウンロードしますSELECT count(*) FROM ...
。これにより、正しい「重み」で呼び出すことができbecomeCurrentWithPendingUnitCount
、進行がより「スムーズ」に表示されます。
もちろん、最初の を表示する前にしばらく待つ必要があるため、これは私にとって理想とはほど遠いものでNSProgress
あり、バックエンドに対してより多くのクエリを実行する必要がありますが、少なくともエクスペリエンスは少し向上しています。
これを取り除くことができれば、はるかに良いでしょう。何か案は?
swift - プロパティオブザーバーを迅速にNSProgressに追加するには?
NSProgress にプロパティ オブザーバーを追加したいと考えています。私はこのコードを持っていますが、一度しか呼び出しません。
ios - iOS 8 - タスクを再開する前に、NSURLSessionDownloadTask によって作成された fractionCompleted = 1.0 の NSProgress オブジェクト
ファイルのダウンロードを含むデータ処理を監視するための NSProgress オブジェクトのツリーがあります。ダウンロードは、バックグラウンド構成で NSURLSession を使用して行われます。
プロセスを開始すると、最上位の NSProgress オブジェクトが予期しない fractionCompleted の数値を報告します。問題をデバッグして (そして「Hello World」アプリケーションに分離して)、[NSURLSession downloadTaskWithRequest:] を呼び出した結果として NSProgress オブジェクトが作成され、上記のメソッドを呼び出した直後にその fractionCompleted プロパティが 1.0 であることがわかりました。この NSProgress オブジェクトは私の NSProgress ツリーの一部を取得するため、進行状況をオフセットすると、ツリーの上位に表示されます。
このサンプル アプリケーションでは、ダウンロードと並行してダミーのバックグラウンド タスクも開始しています。このタスクは、NSProgress オブジェクトを通じて進行状況を報告します。私がそうした理由は、NSURLSession が NSProgress オブジェクトを作成しない場合 (Apple が主張していること)、NSProgress ツリーに少なくとも 1 つのダウンが存在するためです。
ダウンロードとダミー タスクを起動した直後に NSProgress ツリーをログに記録すると、NSProgress ツリーは次のようになります。
その結果、進捗レポートが奇妙になります。
ダウンロードを開始する呼び出し ([self resumeDownload]) をコメントアウトすると、NSProgress ツリーは次のようになります。
ご覧のとおり、fractionCompleted = 1.0 の余分な NSProgress オブジェクトはなく、進捗レポートは問題ありません。
NSURLSessionまたはその下にあるものでない場合、fractionCompleted = 1.0のNSProgressがどこから来ているのかわかりません。(Apple は、NSURLSession は NSProgress オブジェクトを作成しないと述べています。) この動作は、iOS 8 でのみ iOS 7 で確認できます (GM リリースであっても)。
バックグラウンド設定で NSURLSession を使用していることに注意してください! デフォルト構成では、問題は存在しません。
「予期しない」NSProgress オブジェクトが fractionCompleted = 1.0 で表示されるのはなぜですか? NSProgress API の使い方が間違っていますか? iOS 7 と 8 で動作が大きく異なる原因は何ですか?
サンプルコードはこちらから入手できます: https://s3-eu-west-1.amazonaws.com/pg.test/pubtest/NSProgress-20140830.zip
事前に助けてくれてありがとう。
ios - NSProgress の奇妙な動作
複数のサブタスクで構成される 1 つの大きなタスクがあります。その大きなタスクの進捗レポートを追加したいと思います。クラスのドキュメントによると、この種のサブタスクの進行状況は、その子 - 親メカニズムを使用して実行できます
。NSProgress
簡単にするために、1 つのサブタスクで構成される大きなタスクがあるとします (もちろん、実際にはさらに多くのサブタスクがあります)。だからこれは私がやったことです:
ご覧のとおり、サブタスクはバックグラウンド コンテキストを使用して Core Data 関連のコードを実行し、バックグラウンド コンテキストはメイン コンテキストを親コンテキストとして使用します。
これにより、進行状況の「fractionCompleted」プロパティの奇妙な KVO が発生します。
これはプリントです:
ご覧のとおり、印刷は 1.0、0.5、1.0 で始まり、0.66 に進みます ?!
ここからは正常に動作し、予想どおり 1.0 になります。
なぜこれが起こっているのかを理解しようとしましたが、バックグラウンド コンテキストから親コンテキストを削除すると、正常に動作することに気付きました! 0.0 から 1.0 に進みます。
なぜこれが起こっているのですか?どうすればそれを修正できますか?
この問題を示すために、非常に単純なプロジェクトを追加しました(setParentContext: 呼び出しを削除して、それがなくても正常に機能することを確認できます)。