Как использовать параметр Progress в AFNetworking 2.0

Я пытаюсь использовать AFNetworking 2.0 с NSURLSession. Я использую метод

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
                                         fromFile:(NSURL *)fileURL
                                         progress:(NSProgress * __autoreleasing *)progress
                                completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler;

Как я должен использовать параметр прогресса. Метод является неблокирующим методом. Поэтому мне нужно будет прислушиваться к 'progress' для получения обновлений. Но параметр не будет принимать свойство. Использует только локальную переменную (NSProgress * __ autoreleasing *). Я не могу добавить KVO в локальный var.

Я не уверен, как использовать.

Ответ 1

Каждый раз, когда аргумент задается как **, это означает, что вы должны передать указатель на указатель на существующий объект, а не на указатель на фактический объект, как обычно.

В этом случае вы передаете указатель на указатель на объект NSProgress, а затем наблюдаете изменения этого объекта, чтобы получать обновления.

Пример:

// Create a progress object and pass it in
NSProgress *progress;
[sessionManager uploadTaskWithRequest:request fromFile:fileURL progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    // Completion code
}];

// Observe fractionCompleted using KVO
[progress addObserver:self
          forKeyPath:@"fractionCompleted"
             options:NSKeyValueObservingOptionNew
             context:NULL];

Затем он сообщается в:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

    if ([keyPath isEqualToString:@"fractionCompleted"] && [object isKindOfClass:[NSProgress class]]) {
        NSProgress *progress = (NSProgress *)object;
        NSLog(@"Progress is %f", progress.fractionCompleted);
    }
}