2013-10-17 27 views
11

AFNetworking 2.0'ı NSURLSession ile kullanmaya çalışıyorum.AFNetworking 2.0 içinde Progress parametresi nasıl kullanılır

Yöntemini kullanıyorum. Yöntem, engelleme olmayan bir yöntemdir. Bu yüzden güncellemeleri almak için 'progress' dinlemem gerekecek. Ama parametre bir özellik almazdı. Sadece yerel bir değişken alır (NSProgress * __autoreleasing *). Yerel varlığa KVO ekleyemiyorum.

Ben nasıl kullanılacağını gerçekten emin değilim.

cevap

23

Herhangi bir argüman ** olarak verildiği zaman, işaretçiyi işaretçiyi var olan bir nesneye, normal nesneye göre gerçek nesneye değil, bir işaretçiye iletmeniz gerektiği anlamına gelir.

Bu durumda, bir işaretçiyi bir işaretçiye NSProgress nesnesine iletir ve ardından güncelleştirmeleri almak için bu nesnedeki değişiklikleri gözlemlersiniz.

Örnek:

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

Sonra rapor alır:

- (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); 
    } 
} 
+1

nitpicky olmak o * * işaretçi işaretçi * yerine * işaretçi bu. Asıl nesne yığınta yaşar. Doğru cevap için +1 yine de :) –

+0

@GabrielePetronella İyi yakalama, teşekkür ederim :) – iwasrobbed

+1

Bir şey değil. Birkaç kelime ekleme hürriyeti aldım :) –

İlgili konular