Iphone 如何从id获取布尔
我打电话给valueForKey询问一件事。这将返回一个我试图转换为BOOL的id(因为我知道该值是BOOL)。但XCode给出了以下警告: “警告:从指针强制转换为不同大小的整数…” 所以我最后做的是:Iphone 如何从id获取布尔,iphone,objective-c,cocoa,xcode,Iphone,Objective C,Cocoa,Xcode,我打电话给valueForKey询问一件事。这将返回一个我试图转换为BOOL的id(因为我知道该值是BOOL)。但XCode给出了以下警告: “警告:从指针强制转换为不同大小的整数…” 所以我最后做的是: BOOL value = [[NSNumber numberWithInt:((NSInteger)[managedObject valueForKey:@"fieldName"])] boolValue]; 我想一定有更简单的办法。是否存在?-valueForKey:始终返回一个对象id是
BOOL value = [[NSNumber numberWithInt:((NSInteger)[managedObject valueForKey:@"fieldName"])] boolValue];
我想一定有更简单的办法。是否存在?-valueForKey:始终返回一个对象
id
是指向任何对象的指针的objective-c类型
您可以在调试器中检查对象。一些有用的命令:
po value
po [value class]
您会发现该值实际上是一个NSNumber,因此可以向其发送
-boolValue
消息以获取您感兴趣的BOOL标志。如果键的值是BOOL,则返回的对象将是一个NSNumber。您只需请求它的布尔值
。不能简单地从对象(id
)强制转换为布尔、整数或任何其他非对象类型。KVC机器会自动将标量转换为适当的值类型,因此您可以要求它输入所需的类型。您可能会感兴趣-他们会更详细地解释这一点。更简单?也许不是。更简洁?不是你问的时候,而是现代(至少从2015年起)Obj-C,是的。如果对象是具有任何类型的字符串或数值(NSDictionary
)的字典,则可以使用:
//value = (id)
NSNumber *val = value;
BOOL success = [val boolValue];
if (success) {
//yay!
}
BOOL value = @(managedObject[@"fieldName"]).boolValue;
另外,请注意,如果您知道从@“fieldName”
获得的值是NSNumber
,则可以跳过转换:
BOOL value = [managedObject[@"fieldName"] boolValue];
为什么? 由于LLVM编译器中的一些更改:
s现在可以使用熟悉的NSDictionary
语法进行读写dictionary[key]
- 可以使用
语法将兼容值转换为@(值)
s李>NSNumber
- 可以使用点语法访问所有属性(以及采用零参数并返回值的方法):
和object.property
object.method
现在有很多很好的语法糖。我建议你调查一下 Swift 3
if let boolValue = dict["key"] as? Bool {
// do something with boolValue
}
实际上,结果是在NSNumber类集群中。本例中奇怪的是,它返回一个空的NSNumber,而不是NSCFoolean。