У вас есть старая версия Tensorflow; чтобы получить доступ к Keras из Tensorflow 1.1, вы должны использовать
import tensorflow.contrib.keras as keras
. Для последовательного использования используйте
from tensorflow.contrib.keras.python.keras.models import Sequential
model = Sequential()
. Сначала вы указываете NSKeyValueObservingOptionNew:
[theObject addObserver: self
forKeyPath: @"theKey"
options: NSKeyValueObservingOptionNew
context: NULL];
… затем в своем методе наблюдателя:
-(void) observeValueForKeyPath: (NSString *)keyPath ofObject: (id) object
change: (NSDictionary *) change context: (void *) context
{
BOOL newValue = [[change objectForKey: NSKeyValueChangeNewKey] boolValue];
}
В идеале вы должны проверить, было ли значение nil
(ну, это могло произойти ) до вызова -boolValue
, но здесь это опущено для ясности.
Как говорит Джим Дови, за исключением того, что словарь изменений возвращает не nil, а нулевые значения, так что
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];
}