Objective-C中的布尔问题
当我试图从字典中获取布尔值时,我得到:Objective-C中的布尔问题,objective-c,Objective C,当我试图从字典中获取布尔值时,我得到: BOOL isTrue = [someDict objectForKey: @"isTrue"]; 我得到: Initialization makes integer from pointer without a cast 我通过以下操作设置词典: self.someDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys: self.isTrue, @"isTrue"
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"];
编辑:(回应评论)
有两种方法可以将其表示为@属性
。一个是将ivar声明为BOOL
,另一个是将其声明为NSNumber
对于第一种情况,ivar为:BOOL-isTrue代码>,属性为@property BOOL isTrue代码>(显然,我忽略了命名约定)
对于NSNumber
,ivar为:NSNumber*isTrue
且属性为@property(非原子,保留)NSNumber*isTrue代码>。如果使用此路线,您可能希望提供第二个setter方法(setIsTrueBool
或其他方法),允许您只需传入YES
或NO
,然后您自己进行装箱。否则,任何打电话的人都必须自己打拳击
我个人最有可能选择选项#1,但这实际上取决于类的用途。@property的外观如何?我有@property(非原子,赋值)布尔值;