我的textFields上有一个观察者,它会查看“enabled @属性是否已更改。
(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 new和int old,那么定义是否启用了属性的1或0将被返回但是当我使用NSLog来查看你带回来的内容时,它是一长串数字。
我查看了文档,似乎objectForKey实际上返回的id不是整数,但我不知道该怎么做。
编辑:我已经为我的比较添加了代码,该代码试图确定它是从禁用变为启用(反之亦然)。还按照建议添加了boolValue校正。
它没有给出预期的结果,也没有调用正确的方法。这是对的吗? 感谢
答案 0 :(得分:1)
NSDictionary
包含对象(如NSNumber
),而不是基本类型(如int
)。你已经注意到了,
[change objectForKey:NSKeyValueChangeNewKey]
返回id
。如果要将其转换为int,请使用
int new = [[change objectForKey:NSKeyValueChangeNewKey] intValue]
或者如果属性是BOOL,那就更好了:
BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue]
这行代码
int new = [change objectForKey:NSKeyValueChangeNewKey]
导致将NSNumber
对象的指针值存入new
整数,这是你提到的“长串数字”。奇怪的是,它确实在没有警告的情况下进行编译。