使用Xcode5和ARC,我将为布尔值创建一个属性:
@property (nonatomic) BOOL done;而不是我和self.done一起使用它。
问题是,有时我这样使用它时会出错。例如(错误):
//implicit conversion of bool to id disallowed in-ARC
[encoder encodeObject:self.done forKey:@"text"];在这种情况下,我有两个问题: 1.什么时候和为什么要用BOOL创建一个属性,这背后的逻辑是什么? 2.为什么我要得到这个错误?
发布于 2014-01-13 09:53:27
问题2
您将得到该错误,因为BOOL是基元类型的,编码器需要一个对象。您可以轻松地用文字来解决这个问题,如下所示
[encoder encodeObject:@(self.done) forKey:@"text"]这基本上转化为:
[encoder encodeObject:[NSNumber numberWithBool:self.done] forKey:@"text"]问题1
您可以使用BOOL创建属性,因为使用BOOL启动的NSNumber更直接。例如,如果您想使用NSNumber在bool上执行ifs,那么您需要一直执行number.boolValue。
声明属性与声明iVar的优点是,它为您提供了一个KVO就绪结构,并且您有一个入口点来获取该值,并有一个入口点来设置该值。在BOOL的情况下,这主要用于调试。虽然KVO也是一个加号:) (如果您需要更多关于属性与iVars的信息,请按照我的回答)
发布于 2014-01-13 09:50:35
正如你在encodeObject:中所看到的
[encoder encodeObject:self.done forKey:@"text"]; 但是done不是一个目标C对象.相反,它是一个BOOL。
BOOL是typedef signed char BOOL;
不能将BOOL类型框为object对象作为NSNumber并对其进行编码。
[encoder encodeObject:@(self.done) forKey:@"text"]; https://stackoverflow.com/questions/21088107
复制相似问题