如何在Objective-C中为BOOL指针赋值?

时间:2011-03-19 19:51:09

标签: objective-c xcode

关于如何为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;

那么,我现在正走在正确的轨道上吗?

4 个答案:

答案 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

之前的行似乎是标准检查,以查看指针是否有效(不是零)