Wie man einem Block ein zusätzliches Argument hinzufügt

Mailcore hat eine cooleMethode Das lädt einen Anhang herunter und akzeptiert einen Block als Parameter, um den Download-Fortschritt zurückzugeben:

- (CTCoreAttachment *)fetchFullAttachmentWithProgress:(CTProgressBlock)block;

Wobei CTProgressBlock definiert ist als

typedef void (^CTProgressBlock)(size_t curr, size_t max);

also normalerweise würde ich es so benutzen:

//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);
}];

Das Problem ist, dass diese letzte Methode von meiner Haupt-UI-Klasse aufgerufen wirdFileBucket.m Diese Klasse ruft wiederum viele Anhänge für viele verschiedene UI-Elemente nacheinander ab. Ich möchte, dass diese Rückrufmethode zurückgemeldet wirdFileBucket.m Zu welchem ​​Anhang gehört dieser Fortschritt? Mit anderen Worten, ich möchte etwas im Sinne von:

// 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);
}];

Ich weiß, das ist schwer zu erklären / zu veranschaulichen. Eine zusätzliche Sache:AttachmentDownloader.m ist sich bewusst, um welchen Eigensinn es bei diesem Fortschritt geht, aber er möchte ihn nur zurückgebenFileBucket.m jedes Mal Der Callback-Block wird aufgerufen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage