在NSURLSessionTask
中,iOS11中的一个新属性是progress
属性:
对总体任务进度的描述 @property(只读,强) NSProgress *progress;
当在1025886字节中的781334字节查询时,输出如下所示:
<NSProgress: 0x1c0324ec0> : Parent: 0x0 / Fraction completed: 0.0000 / Completed: 0 of 1025886
<NSProgress: 0x1c0325140> : Parent: 0x1c0324ec0 / Fraction completed: 0.0000 / Completed: 781334 of -1
<NSProgress: 0x1c03251e0> : Parent: 0x1c0324ec0 / Fraction completed: 0.0000 / Completed: 0 of 100
注意,fractionCompleted
是0.000而不是0.762。
当数据任务完成时,它的progress
属性的输出如下所示:
<NSProgress: 0x1c4131440> : Parent: 0x0 / Fraction completed: 0.0000 / Completed: 5 of 1142597
<NSProgress: 0x1c4131580> : Parent: 0x1c4131440 / Fraction completed: 0.0000 / Completed: -1 of -1
注:Completed: 5 of 1142597
。
NSURLSessionTask
的进度报告似乎毫无用处。因此,为了在iOS11中向UI报告进度,我仍然必须编写与以前相同的样板代码。那么,这个新属性的目的是什么呢?
发布于 2018-06-15 02:14:50
当我向苹果报告这个错误时,我创建了一个示例项目,它位于这里:https://github.com/mickeyl/iOS-Bug-Example-Projects/tree/master/NSURLSessionTask-Progress-Broken
下面是用上面的示例项目创建的日志的摘录:
2018-06-15 12:02:17.641650+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462000019 of 1073741824
2018-06-15 12:02:17.641917+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462002915 of 1073741824
2018-06-15 12:02:17.642193+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462005811 of 1073741824
2018-06-15 12:02:17.642476+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462008707 of 1073741824
2018-06-15 12:02:17.642828+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462014499 of 1073741824
2018-06-15 12:02:17.643083+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462017395 of 1073741824
2018-06-15 12:02:17.643344+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462020291 of 1073741824
2018-06-15 12:02:17.643611+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462023187 of 1073741824
2018-06-15 12:02:17.643878+0200 NSURLSessionTask-Progress-Broken[74670:2636851] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 0.4588 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 0.4303 / Completed: 462026083 of 1073741824
[...]
2018-06-15 12:03:29.216655+0200 NSURLSessionTask-Progress-Broken[74670:2636247] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 1.0000 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 1.0000 / Completed: 1073727891 of 1073741824
2018-06-15 12:03:29.217201+0200 NSURLSessionTask-Progress-Broken[74670:2636854] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 1.0000 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 1.0000 / Completed: 1073730787 of 1073741824
2018-06-15 12:03:29.217407+0200 NSURLSessionTask-Progress-Broken[74670:2636854] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 1.0000 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 1.0000 / Completed: 1073733683 of 1073741824
2018-06-15 12:03:29.217889+0200 NSURLSessionTask-Progress-Broken[74670:2637014] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 1.0000 / Completed: 5 of 100
<NSProgress: 0x600000131440> : Parent: 0x600000131800 / Fraction completed: 1.0000 / Completed: 1073739475 of 1073741824
2018-06-15 12:03:29.218147+0200 NSURLSessionTask-Progress-Broken[74670:2637014] Progress = <NSProgress: 0x600000131800> : Parent: 0x0 / Fraction completed: 1.0000 / Completed: 100 of 100
在这里,我们可以观察到--由于某种原因--对于一个NSURLSessionTask
来说,有一个父NSProgress
和一个子NSProgress
创建。虽然子进程包含了适当的信息,但在大多数情况下,父进程似乎坚持5/100个单元。至少它使fractionCompleted
在某种程度上是正确的。
因此:当坚持子NSProgress
时,progress
属性有点有用。
不幸的是,我需要支持iOS一直到9,这就是为什么我必须创建我自己的替代品无论如何。
https://stackoverflow.com/questions/49088405
复制相似问题