2013-10-27 5 views
1

Я использую КВО отслеживать ход выполнения файла, который получил:Использование КВО для отслеживания NSProgress

-(void)session:(MCSession *)session didStartReceivingResourceWithName:(NSString *)resourceName fromPeer:(MCPeerID *)peerID withProgress:(NSProgress *)progress 

{ 
NSLog(@"RECEIVING... %@ from peer: %@", progress, peerID); 
dispatch_sync(dispatch_get_main_queue(), ^{ 
    [progress addObserver:self 
       forKeyPath:@"fractionCompleted" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 
});} 

и

- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context 
{ 
if (object == progress) { 
    // Handle new fractionCompleted value 
[progressBar setProgress:progress.fractionCompleted animated:YES]; 
    NSLog(@"Fraction Complete: %@", [NSNumber numberWithDouble:progress.fractionCompleted]); 
    return; 
} 

[super observeValueForKeyPath:keyPath 
        ofObject:object 
         change:change 
         context:context]; 
} 

Я хотел бы использовать это, чтобы обновить UIProgressView. .. Но код происходит сбой на этой линии, и я не понимаю, почему:

[super observeValueForKeyPath:keyPath 
        ofObject:object 
         change:change 
         context:context]; 

EDIT:

Это ошибка

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:  '<ViewController1: 0x15b57000>: An -observeValueForKeyPath:ofObject:change:context: message was  received but not handled. 

EDIT:

Если удалить супер observeValueForKeyPath: ... Ключевой путь, приложение не ломается, но NSLog (@ "Фракция Complete:% @ всегда сообщает значение «0».

ответ

1

Имеет ли ваш суперкласс соблюдениеValueForKeyPath: ofObject: change: context: реализован? Вы можете сделать это, если:

if ([super respondsToSelector:@selector(observeValueForKeyPath:ofObject:change:context:){ 
    NSLog(@"Yeah, I'm here matey!"); 
} else { 
    NSLog(@"Uh oh said the selector ghost"); 
} 
+0

Код, который вы видите в вопросе, это единственный код, который у меня есть. Если есть какой-либо другой код, который я должен добавить, пожалуйста, предоставьте его, спасибо – Alessandro

+0

Попытайтесь избавиться от вызова super observValue .... –

+0

Хорошо, я сделал, и приложение больше не разбивается, но информация о доле завершена всегда 0! И я знаю, что это не потому, что я зарегистрировал его с помощью NSTimer ... – Alessandro

Смежные вопросы