【问题标题】:Objective C decodeBoolForKey not compatible with BOOLObjective C decodeBoolForKey 与 BOOL 不兼容
【发布时间】:2014-01-19 06:46:29
【问题描述】:

所以我有一个实现 NSCoding 的 NSObject。在我的解码器方法中,它需要检索一个属于该类以及其他属性的 BOOL。

-(id)initWithCoder:(NSCoder *)decoder {
    self = [super init];
    if (self) {
        [self setRandomObject:[decoder decodeObjectForKey:@"randomObjectKey"]];
        [self setMyBool:[decoder decodeBoolForKey:@"myBoolKey"]];
    }
    return self;
}

然而,这会在[self setMyBool ... 的行上引发以下警告(黄色警告,仍可运行)。

Incompatible integer to pointer conversion sending 'BOOL' (aka 'signed char') to parameter of type 'BOOL *' (aka 'signed char *')

我不明白为什么它试图将一个布尔指针发送到一个布尔值。如果有人知道如何解决这个问题,请告诉我!非常感谢。


另外,现在已经很晚了,我很累,我可能只是错过了一些简单的事情,所以请多多包涵。

【问题讨论】:

  • myBool 是属性吗? setMyBool:的类型签名是什么?
  • 再次阅读该错误消息 - 您正在将 from 整数(即 BOOL) 转换为 指向 BOOL 的指针。

标签: objective-c pointers boolean nscoding


【解决方案1】:

你的方法是这样的吗?

- (void)setMyBool:(BOOL *)value
or:
@property BOOL *myBool;

因为它应该是:

- (void)setMyBool:(BOOL)value
or:
@property BOOL myBool;

【讨论】:

  • 要么那个,要么属性声明使用了错误的类型。
  • 好吧,我刚刚发现我不小心声明了类型为BOOL * 而不是BOOL 的属性。您的回答确实有所帮助,因为在阅读后我仔细检查了属性声明并注意到了错误。谢谢!
【解决方案2】:

看来我不小心将该属性声明为BOOL * 而不是BOOL。我改变了它,现在一切正常。在阅读了 cmets 和答案后,我认为该方法是正确的,然后查看了属性的声明。非常感谢,深夜编码比我想象的要难。

【讨论】:

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