objective-c - Objective-C 中的 BOOL 问题

标签 objective-c

当我尝试这样做以从字典中获取 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 或其他),它允许你传入 YESNO,然后你自己做拳击。否则调用此方法的任何人都必须自己进行拳击。

我个人最有可能选择选项 #1,但这实际上取决于类(class)的目的。

关于objective-c - Objective-C 中的 BOOL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067361/

相关文章:

objective-c - 如何从 NSResponder 显式发送键值观​​察通知?

objective-c - 核心图像 : Create a CIImage with solid color and display it in NSImageView

iphone - 将 URL(作为字符串)添加到数组时出现问题

objective-c - 带有圆角和投影的自定义 NSView

iphone - 在 Objective-C 上使用嵌套 JSON 对象时遇到问题

ios - 按下后退按钮时,上一个屏幕上的导航标题消失

ios - 在 Objective-C 中使用 SCRecorder 以修改后的播放速度保存视频

ios - 选择 tableView 单元格时更改单元格上的按钮图像

objective-c - 选中行复选框后,使文本单元格中的文本改变颜色

objective-c - 使用什么格式来录制音频?