Как говорит Джим Довей, за исключением того, что словарь изменений приносит не ноль, а нулевые значения, так что
NSLog(@"%@", [change description]);
приведет к чему-то вроде:
{
kind = 1;
new = <null>;
old = <null>;
}
Как уже упоминалось, вызов boolValue для нулевого значения приведет к ошибке
[NSNull boolValue]: нераспознанный селектор отправлен на экземпляр 0xa0147020
Чтобы избежать этого, нужно проверять не на ноль, а на [NSNull null], вот так:
if([change objectForKey:NSKeyValueChangeNewKey] != [NSNull null])
BOOL newValue = [[change objectForKey: NSKeyValueChangeNewKey] boolValue];
или
id newValue;
if((newValue[change valueForKey: @"new"]) != [NSNull null]){
BOOL newBOOL = [newValue boolValue];
}