问题标签 [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.

0 投票
1 回答
4208 浏览

objective-c - 将 NSProgress 与嵌套的 NSOperations 一起使用

我一直在调查NSProgress,但发现缺少现有的文档、课程参考和教程。我主要想知道我的 NSProgress 是否适用于我的用例。类参考文档也提到了suboperationsor subtasks,我可能弄错了,但我解释suboperations为 NSOperation 管理一组其他NSOperations. 我的用例示例如下:

  • Upload All Items in Group为每个存在的组创建一个操作。
  • 将这些操作中的每一个添加到NSOperationQueue.
  • 每个Upload All Items in Group操作都会为其组中的每个项目创建一个Upload Item操作。这些都被添加到NSOperationQueue由操作管理的。

我本来希望NSProgress支持这一点,并允许我将进度从嵌套操作(Upload Item操作)传播到父操作,然后最终传播到主线程和 UI。但是我很难实现这一点,似乎NSProgress更多的是用于在一个后台线程上执行所有代码的长时间操作,但是有单独的“部分”,可以很容易地确定何时取得了进展,如果这是那么这个术语的使用suboperation有点误导,因为它让人想起嵌套的使用NSOperations

感谢您提供的任何帮助,如果需要更多详细信息,请告诉我。

0 投票
1 回答
8713 浏览

ios - Using NSProgress to find download speed and time remaining

According to the documentation for NSProgress I see that -[NSProgress localizedAdditionalDescription] can report download speed and time remaining, e.g.:

1.61 GB of 3.22 GB (2 KB/sec) — 2 minutes remaining

However, I'm not able to get those details when I associate an NSProgress to a NSURLSessionDownloadTask. Here's my code:

Downloader.h

Downloader.m

DownloadObserver.m

This only prints out:

0 of 100

Zero KB of 100 bytes

How can I get localizedAdditionalDescription to print the download speed and time remaining?

0 投票
2 回答
2506 浏览

macos - 如何使用 Cocoa Bindings 使用 NSProgress 更新进度条?

我一直在尝试使用新的 NSProgress 类来报告我的 Mac 应用程序中的操作进度。现在,它已作为属性保存在我的 App Delegate 中(并从不同的类和不同的队列更新),并且似乎已正确更新,如 logging 所证明的那样[_currentProgress fractionCompleted]

但是,当我尝试使用 NSProgress 对象更新进度条时,我的问题就出现了。我已经用这样的绑定设置了进度条:

绑定截图

进度条似乎停留在我的空占位符上(通过将空占位符更改为“1”来证明),而不是重新绘制或更新以适应任何进一步的进展。currentProgress仅在操作开始后设置,这就是为什么进度条一开始使用 null 占位符的原因,但是当 NSProgress 对象设置为该属性时,它不会努力更新进度条。

如果有人可以在这里帮助我,那就太好了……(一定是我做错了什么愚蠢的事情!)

0 投票
2 回答
1694 浏览

ios - 进度开始后是否可以动态扩展 NSProgress 层次结构?

假设我有一些NSProgress对象层次结构。为简单起见,假设有 2 个孩子的根进度。如果进度已经开始,我可以向层次结构添加另一个子进度并期望发生正确的事情吗?例如,假设我从 2 个孩子开始,所以totalUnitCount根的 是2pendingUnitCount2。一旦第一个孩子完成,根进度fractionCompleted将是0.5. 如果我然后添加另一个子进度,根进度会按我的fractionCompleted意愿更新,但根进度保持在,就像. 我可以手动更新,但这会导致 root关闭。此外,似乎没有办法在不调用的情况下更新. 曾是~0.33totalUnitCount2pendingUnitCounttotalUnitCountfractionCompletedpendingUnitCountbecomeCurrentWithPendingUnitCount:NSProgress不是为这种用途而设计的,还是有“正确”的方法来做到这一点?

我的用例是我有一个可以将文件上传到远程服务器的应用程序。用户可以选择一些文件并点击按钮开始上传它们。当他们上传时,用户会看到上传作业的整体进度。现在,如果用户想要在上传过程中选择更多要上传的照片,我想更新进度以反映新的总数。例如,他当前正在上传 2 个文件,其中 1 个已经完成,在他们正在上传的同时,他又添加了 2 个要上传。进度应自行调整。总单位数现在应该是 4,应该还有 3 个项目要上传。对我来说,这似乎是一个常见的用例。

这是我编写的用于动态扩展NSProgress层次结构的单元测试。下面测试中的所有断言都通过了,但是如果您检查根totalUnitCount,它始终保持为 2,并且似乎无法判断根进度还有多少项目需要完成。根进度是 UI 将观察到的进度,因此层次结构中更深层次的更改向上传播很重要,包括totalUnitCount等。

0 投票
0 回答
205 浏览

ios - NSProgress 树,事先不知道孩子的“大小”

我确信这已经发生在某人身上,但我找不到可靠的来源(在 Stackoverflow 或其他地方)来解决这个问题。

我必须下载(有限)数量的文件。在下载它们之前我不知道它们的大小。它们的大小可能会发生很大变化,在开始下载之前我不知道。

我经常有 9 个非常小的文件和 1 个非常大的文件。如果我使用NSProgress它的“children”功能,我会很快显示 90% 的完成,然后 UI 似乎会卡住(即使不是这种情况),因为最后一个文件要大得多。

这是我模拟大文件的示例代码。

becomeCurrentWithPendingUnitCount如果您在开始下载之前不知道它的重量,您将如何处理这种无法更改的情况?

编辑:这就是我现在所做的:

首先:我撒谎了。我不下载文件,而是从数据库中下载数据,但最终还是同样的问题。

在创建我的根之前NSProgress,我从我的后端(SELECT count(*) FROM ...)下载对象的数量。有了这个,我可以becomeCurrentWithPendingUnitCount用正确的“权重”打电话,进度看起来更“顺利”。

当然,这对我来说远非理想,因为我必须等待一段时间才能显示第一个NSProgress,这使我对后端进行了更多查询,但至少体验要好一些。

如果我能把它去掉就更好了。有任何想法吗?

0 投票
1 回答
4373 浏览

swift - 使用 AFNetworking 快速下载文件

我想使用 AFNetworking 快速从 URL 下载文件,并显示下载进度。我有这段代码,但它不起作用:

我做错了什么?

0 投票
1 回答
706 浏览

swift - 如何快速将属性观察器添加到 NSProgress?

我想将属性观察器添加到 NSProgress。我有这段代码,但它只调用一次。

0 投票
1 回答
1756 浏览

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 树中仍然至少有一个对象。

在启动下载后立即记录 NSProgress 树,这里的虚拟任务是 NSProgress 树的样子:

结果,进度报告变得很奇怪。

如果我注释掉开始下载的调用([self resumeDownload]),那么 NSProgress 树看起来像:

如您所见,没有额外的 NSProgress 对象,fractionCompleted = 1.0 并且进度报告正常。

现在,如果不是来自 NSURLSession 或下面的其他东西,我看不到带有 fractionCompleted = 1.0 的 NSProgress 来自哪里。(Apple 声明 NSURLSession 不会创建 NSProgress 对象。)我在 iOS 7 上看不到这种行为,只有在 iOS 8 上(即使是 GM 版本)。

请注意,我正在使用带有后台配置的 NSURLSession!使用默认配置,问题不存在。

为什么那个“意外”的 NSProgress 对象会以 fractionCompleted = 1.0 出现?我是否使用了 NSProgress API 错误?是什么导致 iOS 7 和 8 上的行为截然不同?

示例代码可在此处获得:https ://s3-eu-west-1.amazonaws.com/pg.test/pubtest/NSProgress-20140830.zip

提前感谢您的帮助。

0 投票
2 回答
1657 浏览

ios - NSProgress 奇怪的行为

我有一项由几个子任务组成的大任务。我想为这项大任务添加进度报告。
为此我想使用NSProgress,并且根据类文档,我可以通过使用它的子-父机制来完成这种子任务进度。

所以为了简化它,假设我有一个由一个子任务组成的大任务(当然在现实生活中会有更多的子任务)。所以这就是我所做的:

可以看到,子任务使用后台上下文运行一些Core Data相关的代码,后台上下文使用主上下文作为他的父上下文。
这会导致进度的“fractionCompleted”属性出现一些奇怪的 KVO。

这是印刷品:

如您所见,打印从 1.0、0.5 和 1.0 开始,然后是 0.66?!
从这里它表现正常并像我预期的那样进入1.0。

我试图理解为什么会发生这种情况,我注意到如果我从背景上下文中删除父上下文,它工作正常!我从 0.0 进步到 1.0。

任何想法为什么会发生这种情况?我该如何解决?

我添加了一个非常 简单的项目来演示这个问题(您可以删除 setParentContext: 调用以查看它在没有它的情况下也能正常工作)

0 投票
1 回答
464 浏览

grand-central-dispatch - NSProgress when to remove the observer

NSProgress is a useful class for tracking progress across queues. It relies on observing the "fractionCompleted" property. But when/how are you supposed to remove the observer? I tried dispatch_group and dispatch_barrier but the observer is still removed before all the work has been completed.

This is the code I have so far.