12

NSURLSession で AFNetworking 2.0 を使用しようとしています。メソッドを使用しています

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

プログレス パラメータをどのように使用すればよいでしょうか。メソッドは非ブロッキング メソッドです。したがってprogress、更新を取得するには、「 」をリッスンする必要があります。ただし、パラメーターはプロパティを取りません。ローカル変数のみを取ります (NSProgress * __autoreleasing *)。KVO をローカル変数に追加できません。

使い方がよくわかりません。

4

1 に答える 1

25

引数が与えられるときはいつでも、**通常のように実際のオブジェクトへのポインターではなく、既存のオブジェクトへのポインターへのポインターを渡すことになっていることを意味します。

この場合、オブジェクトへのポインターへのポインターを渡し、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);
    }
}
于 2013-10-18T02:05:58.007 に答える