【问题标题】:BOOL issue in Objective-CObjective-C 中的 BOOL 问题
【发布时间】:2010-01-14 20:33:25
【问题描述】:

当我尝试这样做以从字典中获取 BOOL 时,我得到:

BOOL isTrue = [someDict objectForKey: @"isTrue"];

我明白了:

Initialization makes integer from pointer without a cast

我通过这样做来设置字典:

self.someDict = [[NSMutableDictionary alloc]
    initWithObjectsAndKeys:
        self.isTrue, @"isTrue",
        nil];

有什么想法吗?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    用途:

    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;。如果您选择这条路线,您可能需要提供第二个设置方法(setIsTrueBool 或其他方法),让您只需传入YES 或NO,然后您自己进行装箱。否则任何打电话的人都必须自己打拳击。

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

    【讨论】:

    • @property 的外观如何?我有@property (nonatomic, assign) BOOL isTrue;
    猜你喜欢
    • 2010-11-16
    • 2020-03-13
    • 1970-01-01
    • 2015-04-24
    • 2011-10-04
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多