2013-06-26 7 views
0

У меня есть наблюдатель на моих TextFields, который выглядит, чтобы увидеть, если «включен @ собственности изменился.Получение значения измененного свойства, связанное с наблюдателем

(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *) context; 
{ 


UITextField *txtField = (UITextField *)object; 




BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue]; 
BOOL old = [[change objectForKey:NSKeyValueChangeOldKey] boolValue]; 


if ((new != old) && (new = YES)) 
{ 

[self fadeDisable:txtField]; 
} 

else if ((new != old) && (new = NO)) 
{ 
    [self fadeEnable:txtField]; 

} 

Я подумал, что если я ИНТ нового и int old, значение 1 или 0, которое определено, если свойство включено или нет, будет возвращено, но когда я использую NSLog, чтобы увидеть, что вы возвращаете, это длинная строка чисел.

Я просмотрел документацию и кажется, что objectForKey фактически возвращает id не целое число, но я не уверен, что делать.

Редактировать: я добавил код для моего сравнения, который пытается определить, было ли оно отключено до включенного (или наоборот). Также добавлена ​​коррекция boolValue, как рекомендовано.

Это не дает ожидаемого результата и не вызывает правильный метод. Правильно ли это? Благодаря

+0

*** int new *** ??? Считаете ли вы, что он скомпилируется? –

+1

Они 'id', потому что словари могут содержать только объекты. Если исходным свойством является 'int', то, скорее всего, вы получаете' NSNumber' назад. –

+0

@ LithuT.V Почему бы и нет? –

ответ

1

NSDictionary содержит объекты (например, NSNumber), а не примитивные типы (как int). Как вы заметили,

[change objectForKey:NSKeyValueChangeNewKey] 

id. Если вы хотите, чтобы преобразовать его в целое, используйте

int new = [[change objectForKey:NSKeyValueChangeNewKey] intValue] 

Или, если свойство является BOOL, даже лучше:

BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue] 

Эта строка кода

int new = [change objectForKey:NSKeyValueChangeNewKey] 

приводит хранящей значение указателя на объект NSNumber в целое число new, это «длинная строка чисел», о которой вы упомянули. Как ни странно, он компилируется без предупреждения.

+0

Спасибо за это. Я сделал то, что вам было поручено, имеет смысл. Я добавил код в своем первоначальном запросе для сравнения, которое я делаю, но, похоже, не работает. Не могли бы вы помочь? – user1923975