1

我正在尝试从我的上传方法中删除一些 UI 代码依赖项,以更好地理解 MVC 范例。

我想设计一种在 UITableView 中可视化上传进度的方法,并指定单个单元格来显示相应的 NSOperation 子类。我的 NSOperation 子类已被破解以支持委托回调模式(即仅非并发/主线程)。NSOperation 看起来像这样:

@class MyUploadOp;
@protocol MyUploadDelegate;
-(void)uploadOp:(MyUploadOp *)uploadOp madeProgress:(CGFloat)progress;
-(void)uploadOp:(MyUploadOp *)uploadOp didUploadLocalFile:(LocalFileObject *)localFile;
@end

@interface MyUploadOp : NSOperation <DBRestClientDelegate>
@property (nonatomic,strong) LocalFileObject *myLocalFile;
-(id)initWithLocalFile:(LocalFileObject *)localFile;
@end

如您所见,我正在使用适用于 iOS 的 Dropbox SDK。这个 NSOperation 子类将本地文件上传到 Dropbox。我在 NSOperation 类中接收到必要的 Dropbox 委托方法,然后将它们转发给负责设置和跟踪上传的类。

我想做的是设置一个新的 UITableViewController 和一些自定义 UITableViewCells。这部分我不需要帮助,yadda yadda。我需要帮助的是:

  • 跟踪可能设置的 NSOperations
  • 将每个 NSOperation 分配给 UITableViewCell
  • 谁应该是我的 NSOperation 的代表来接收这些消息?
  • 我是否应该在我的操作上设置属性,例如“进度”并使用 KeyValue Observing?
  • 如果是这种情况,应该观察什么对象?单元格还是视图控制器?
  • 当 NSOperation 完成并从队列中消失时会发生什么,我需要保留记录以确保表格保持填充状态。
  • 在每次委托方法调用时更新单元格中的 UIProgressBars
  • 在 NSOperation 完成后将项目保留在表中

我当前的代码目前正在运行,但我还没有实现任何表格内容。我想不出跟踪这些项目的最佳方法。也许我需要想出一个 NSObject 子类来保存操作的引用,并用它填充我的表?

4

1 回答 1

1

跟踪可能设置的 NSOperations

向操作添加属性,以便您可以设置标识符。然后,当调用委托方法时,您可以读取标识符并将其转换为索引路径。在您的表视图控制器类中,保留一个标识符数组(数组中的索引是它显示的行号)。

将每个 NSOperation 分配给 UITableViewCell

正如刚才所描述的。

谁应该是我的 NSOperation 的代表来接收这些消息?

表视图控制器。

我是否应该在我的操作上设置属性,例如“进度”并使用 KeyValue Observing?

不,但是您可能应该将进度值缓存在表格视图控制器中的数组中,因此如果单元格滚动到屏幕外,您可以在它们滚动回屏幕时更新它们(无需去查找操作并查询它) .

当 NSOperation 完成并从队列中消失时会发生什么,我需要保留记录以确保表格保持填充状态。

没关系,只是不要从数组中删除标识符。

在每次委托方法调用时更新单元格中的 UIProgressBars

使用存储在表视图控制器中的数组内容。一个用于标识符,一个用于进度值。两个数组中的项目数应始终相同。

于 2013-07-21T22:40:42.583 回答