0

我正在开发 iOS6 并使用 Xcode 4.5.2。

我有一个UIViewController,假设它的名字是aViewController。在此UIViewController,我使用此代码将BOOL 指针声明为属性。实际上,这不是我实现的一段代码,所以我真的不知道为什么使用BOOL 指针

现在,当给这个BOOL 指针赋值时,我得到了这个著名的警告Incompatible integer to pointer conversion assigning to 'BOOL *' (aka 'signed char *') from 'signed char',这是完全可以理解的,因为在我的例子中,BOOL指向一个布尔变量。

为了解决这个问题,我试过这个。所以我的代码是这样的:

aViewController.aBoolPointer = YES;

然后,我试过了,

aViewController.(*aBoolPointer) = YES;

由于 Objective-c 是 C 的超集,我记得在 C.*表示法中等于->. 上面的符号给出了一个错误。错误描述:预期标识符

如果我将代码更改为这样:

aViewController->aBoolPointer = YES ;

我收到此错误Instance variable aBoolPointer is protected

这是奇怪的问题,如果我使用此代码

aViewController.aBoolPointer = NO ;

然后,我没有收到任何警告。

所以我的问题是:

1 - 为什么当我为BOOL 指针分配NO值时没有收到警告?

2 - 如何正确地将YES值分配给BOOL 指针

3 -通过考虑我解释的步骤, YESNO有什么区别?

谢谢你们。

4

2 回答 2

3

1 为什么当我为 BOOL 指针分配 NO 值时没有收到警告?

因为与, 或,NO相同,所以就像将 a 分配给指针一样,如下所示:0NULLNULL

BOOL *p = NULL;

2 如何正确地将 YES 值分配给 BOOL 指针?

如果属性定义为:

@property(assign, nonatomic) BOOL *boolp;

然后:

BOOL b = YES;
obj.boolp = &b;

3 通过考虑我解释的步骤,YES 或 NO 有什么区别?

我不明白这个问题。

于 2013-01-24T08:21:01.403 回答
0

BOOL 指针只是和其他指针一样的指针

if (aViewController.aBoolPointer != NULL)
    *(aViewController.aBoolPointer) = YES;

不过,我不知道为什么属性会使用 BOOL 指针作为类型。你在使用一些第三方框架吗?您最好检查他们的文档或询问作者。

于 2013-01-24T08:24:29.343 回答