Mailcore有一个很酷的方法,它可以下载附件并接受一个块作为参数来返回下载进度:
- (CTCoreAttachment *)fetchFullAttachmentWithProgress:(CTProgressBlock)block;
其中 CTProgressBlock 定义为
typedef void (^CTProgressBlock)(size_t curr, size_t max);
所以通常我会像这样使用它:
//AttachmentDownloader.m
int fileNum = x; // explained later
CTCoreAttachment* fullAttachment =
[attachment fetchFullAttachmentWithProgress:^(size_t curr, size_t max) {
NSLog(@"::: this is curr: %zu", curr);
NSLog(@"::: this is max: %zu\n\n", max);
}];
问题是我的主 UI 类调用了最后一个方法,FileBucket.m
而这个类又依次为许多不同的 UI 元素获取许多附件。我希望这个回调方法报告FileBucket.m
这个进度属于哪个附件..所以换句话说,我想要一些类似的东西:
// FileBucket.m
[AttachmentDownloader runMultiple:attachmentTree
withProgress:^(size_t curr, size_t max, int fileNum) {
NSLog(@"::: this is curr: %zu", curr);
NSLog(@"::: this is max: %zu\n\n", max);
NSLog(@"::: this progress belongs to element %d", fileNum);
}];
我知道这很难解释/说明..还有一件额外的事情:AttachmentDownloader.m
知道这个进度是关于哪个附件的..但它只是想在FileBucket.m
每次调用回调块时将其传回。