【问题标题】:AFNetworking UIProgress view in Table Cell causes dealloc when the tableviewcontroller is navigated from表单元格中的 AFNetworking UIProgress 视图在从 tableviewcontroller 导航时导致 dealloc
【发布时间】:2015-03-05 12:10:00
【问题描述】:

我一直在实现后台上传和下载,并使用 AFNetworking 来处理任务。

部分原因是我有一个表格视图,可以显示文件传输的当前状态。

当我创建 tableview 单元格时,我将 UIProgressView(来自 AFNetworking 类别)添加到单元格中。

然后我为其分配任务以跟踪如下所示的进度。

    [taskProgressView setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)self.task animated:YES];

但是,当我离开具有 tableview 的 View 控制器时,我遇到了以下问题。

*** -[UIProgressView retain]: 消息发送到已释放实例 0x65a6cced0

在代码中,我尝试尽我所能解除分配,设置单元格的重用,并删除我拥有的所有通知观察者。但是,这仍然会发生。

我设法阻止这种情况的唯一方法是不将任务分配给 UIProgressView。

您可以找到 UIProgressView 的类别(此处为 AFNetworking)

https://github.com/AFNetworking/AFNetworking/blob/master/UIKit%2BAFNetworking/UIProgressView%2BAFNetworking.m

我的假设是那里的某些东西仍然保留对进度视图的引用并且没有正确释放它。

感谢您对下一步尝试的任何建议。

【问题讨论】:

    标签: ios objective-c iphone uitableview afnetworking


    【解决方案1】:

    在 AfNetworking 代码中,当您调用 setProgressWithDownloadProgressOfTask 时,self.task 将作为观察者添加到 UIProgressView 的某些属性中。

    在单元格的dealloc 方法中,您应该停止观察任务属性。

    我会建议这样的事情:

    -(void)dealloc{
        [self.task removeObserver:taskProgressView forKeyPath:@"state"];
        [self.task removeObserver:taskProgressView forKeyPath:@"countOfBytesReceived"];
    }
    

    您必须使用自定义 AFNetworking UIProgressView 中的 keyPath 字符串并不是很好,该类还应该添加删除观察者的方法。

    但我认为这应该可以解决您的崩溃问题。祝你好运!

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2018-07-30
      • 1970-01-01
      相关资源
      最近更新 更多