【问题标题】:how to insert a (BOOL *) into NSMutableDictionary如何将 (BOOL *) 插入 NSMutableDictionary
【发布时间】:2011-12-26 16:06:45
【问题描述】:

我正在尝试将布尔数据库值保存到地图中,如下所示 -

[recentTags setValue:[NSNumber numberWithBool:[aMessage isSet]] forKey:[aMessage tagName]];

它给了我一个错误说“不兼容的指向整数转换的指针将 BOOL * aka signed char* 发送到 'BOOL' aka signed char”

如何将 BOOL* 插入字典中?

【问题讨论】:

  • 为什么-isSet 返回BOOL * 而不是BOOL

标签: ios nsmutabledictionary


【解决方案1】:

将 BOOL 包装在 NSNumber 中:

NSNumber *boolNumber = [NSNumber numberWithBool:YES];

把它拿出来:

BOOL b = [boolNumber boolValue];

您可以将其他非对象类型(例如指针或结构)包装在 NSValue 中。


编辑:假设你真的是一个 BOOL*(指针):

NSValue *boolValue = [NSValue value:pointerToBool withObjCType:@encode(BOOL*)];
BOOL *b = [boolValue pointerValue];

【讨论】:

  • 正如您在我的问题中看到的那样,我已经在这样做了,但这对我不起作用。那是我得到我提到的错误的时候。
  • 您确定 [aMessage isSet] 返回的是 BOOL 而不是 BOOL*?如果返回后者,则需要使用[NSNumber numberWithBool:*[aMessage isSet]](尽管您应该先检查它是否为NULL)。
  • 从Clang v3.1开始,我们可以使用文字:NSNumber *yesNumber = @YES;NSNumber *noNumber = @NO;,相当于[NSNumber numberWithBool:YES]
【解决方案2】:

您的isSet 方法需要具有以下签名:- (BOOL)isSet;

假设是这种情况,使用钛诱饵提到的 NSNumber 应该没有任何问题。

你的最后一句话让我很感兴趣,BOOL *。当然,您的意思是BOOL,如果您绝对需要一个布尔引用,那么我建议您将初始/实际 BOOL 存储在 NSNumber 中,并将该对象的引用存储在您需要的任何位置(即你的 NSMutableDictionary)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多