Наблюдение Значения ключа в Какао, анализируя свойство изменения

У вас есть старая версия Tensorflow; чтобы получить доступ к Keras из Tensorflow 1.1, вы должны использовать

import tensorflow.contrib.keras as keras

. Для последовательного использования используйте

from tensorflow.contrib.keras.python.keras.models import Sequential
model = Sequential()
.
10
задан Quinn Taylor 30 June 2009 в 19:42
поделиться

2 ответа

Сначала вы указываете 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 , но здесь это опущено для ясности.

21
ответ дан 3 December 2019 в 13:47
поделиться

Как говорит Джим Дови, за исключением того, что словарь изменений возвращает не 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];
}
20
ответ дан 3 December 2019 в 13:47
поделиться