как добавить дополнительный аргумент в блок
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);
}];
проблема в том, что этот последний метод вызывается моим основным классом пользовательского интерфейсаFileBucket.m
и этот класс, в свою очередь, последовательно выбирает множество вложений для множества различных элементов пользовательского интерфейса. Я хотел бы, чтобы этот метод обратного вызова сообщал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
каждый раз блок обратного вызова называется.