0
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(Player *)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context
{
switch (object.Status)
{
case 0:
NSLog(@"%ld Play" ,object.Status);
break;
case 1:
NSLog(@"%ld Pause", object.Status);
break;
case 2:
NSLog(@"%ld Stop", object.Status);
break;
case 3:
NSLog(@"%ld RewindF", object.Status);
break;
case 4:
NSLog(@"%ld RewindB", object.Status);
break;
default:
break;
}
}
和:
[player addObserver:classA
forKeyPath:@"Status"
options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
context:nil];
我想在屏幕上看到的2個值: NewValueKey
和OldValueKey
,但我也不怎麼也NSLog OldValue。 我試着做某事是
NSString *oldValue = [change objectForKey:NSKeyValueObservingOptionNew];
但我得到錯誤
「NSUInteger太字符串」
如何連接於一體的NSLog新老:)?
您還應該檢查keyPath以確保'change'字典包含您認爲它的作用。例如,如果你有這個對象觀察一個單獨的對象 - 並且KVO通知被髮送,那麼這裏的'NSLog'可以拋出一個異常,如果變化字典中的值不能被轉換成'long' –
你的**注**實際上是這裏的問題,而不是鑄造。實際上,由於'objectForKey:'返回一個對象,所以你建議的投射不正確,因此投射到'long'是不正確的。 – Joost
對不起,你是對的。腦屁。讀他的「錯誤」,它把我扔了 –