当我尝试这样做以从字典中获取 BOOL 时,我得到:
BOOL isTrue = [someDict objectForKey: @"isTrue"];
我得到:
Initialization makes integer from pointer without a cast
我通过这样做来设置字典:
self.someDict = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:
self.isTrue, @"isTrue",
nil];
有什么想法吗?
最佳答案
使用:
BOOL isTrue = [[someDict objectForKey:@"isTrue"] boolValue];
将 BOOL
存储在 NSDictionary
中的唯一方法是将其装入 NSNumber
对象中。 BOOL
是原始的,字典只包含对象。
类似地,要将 BOOL
存储在字典中,请使用:
[someDict setObject:[NSNumber numberWithBool:isTrue] forKey:@"isTrue"];
编辑:(回应评论)
有两种方法可以将其表示为 @property
。一种是将 ivar 声明为 BOOL
,另一种是将其声明为 NSNumber
。
对于第一种情况,ivar 是:BOOL isTrue;
,属性是@property BOOL isTrue;
(显然我忽略了命名约定)。
对于 NSNumber
,ivar 是:NSNumber * isTrue;
属性是 @property (nonatomic, retain) NSNumber * isTrue;
。如果你选择这条路线,你可能想要提供第二个 setter 方法(setIsTrueBool
或其他),它允许你传入 YES
或 NO
,然后你自己做拳击。否则调用此方法的任何人都必须自己进行拳击。
我个人最有可能选择选项 #1,但这实际上取决于类(class)的目的。
关于objective-c - Objective-C 中的 BOOL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067361/