Ответ 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);
}
}