关于如何为BOOL指针赋值,我有点困惑?这是我的代码:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
self.latitude.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
self.longitude.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];
if (!initialBroadcast) {
initialBroadcast = YES; // Where I'm having troubles
[broadcastTimer fire];
};
}
编译器一直告诉我:Incompatible integer to pointer conversion assigning to 'BOOL *' (aka 'signed char *') from 'BOOL' (aka 'signed char')
。
由于我是nubski,我很感激对此的澄清。
更新
正如你们许多人所指出的,我显然是通过使用指针来滥用BOOL
的声明。说实话,我不知道为什么使用它,但是因为我是Objective-C的新手,所以它必须适用于我正在做的事情,所以它会卡住。
无论如何,我已经将声明改为:
// In .h
@interface ... {
BOOL initialBroadcast;
}
@property BOOL initialBroadcast;
// In .m
@synthesize initialBroadcast;
那么,我现在正走在正确的轨道上吗?
答案 0 :(得分:59)
你需要说
*initialBroadcast = YES;
initialBroadcast是一个指针,也就是内存地址。 *允许访问指针所在的内存地址的值。所以initialBroadcast是一个内存地址,但* initialBroadcast是一个布尔值或字符。
答案 1 :(得分:59)
问题不在于分配,您更有可能将实例变量声明为BOOL *initialBroadcast;
。
没有理由将实例变量声明为指针(至少除非你确实需要一个BOOL的C数组)。从声明中删除*。
同样,这将修复您当前不正确的if()测试。实际上,它正在检查是否设置了指针,而不是值。
答案 2 :(得分:8)
改变 -
initialBroadcast = YES;
到
(*initialBroadcast) = YES;
因为,您要为指针指向的位置指定值(假设它已初始化),initialBroadCast
应首先取消引用。
答案 3 :(得分:3)
可能是你应该写
*initialBroadcast = YES; // Where I'm having troubles
之前的行似乎是标准检查,以查看指针是否有效(不是零)