设备未连接时,在bool上编译错误

时间:2015-07-10 09:26:47

标签: ios objective-c xcode

我正在尝试使用此代码段执行简单的动画:

[UIView animateWithDuration:2.0
                      delay:0.0
                    options: UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                    [self.view setAlpha:0.7f];

                 }
                 completion:^(BOOL finished){
                     if(finished)  NSLog(@"Finished !!!!!");
                     // do any stuff here if you want
                 }];

但XCode给出了一个错误说明:

  

"不兼容的块指针类型发送' void(^)(uint_8t)'至   类型参数' void(^)(BOOL)'"。

如果我尝试更改' BOOL'对于' bool',然后代码在iPad Air上编译时工作正常,但是当我断开iPad并尝试模拟器时,我得到了相同的错误,但是有不同的类型:

  

"不兼容的块指针类型发送' void(^)(bool)'至   类型参数' void(^)(BOOL)'"。

在我看来,这很奇怪,因为它是一个似乎适用于许多人的代码片段,并且是一段相当标准的代码。什么可能导致这种行为?

P.S。我还在 - (void)viewWillDisappear:(bool)动画方法中收到不兼容类型的警告。当我连接iPad时它们也会消失,并在断开连接时再次出现。

编辑:---- 此代码甚至会导致错误:

[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)
     {
         address = addresses[key];
         if(address) *stop = YES;
     } ];

同样在BOOL字段上。并且错误是相同的,冲突的参数类型。

1 个答案:

答案 0 :(得分:2)

BOOL是一种不同的类型,具体取决于您是编译为32位还是64位。有不同类型使用,如Bool,bool,布尔加上其他可能 - 确保你在任何地方使用相同的类型。

插入设备意味着将为您的设备编译代码,而不是为模拟器编译,因此可以在32位和64位之间进行更改并触发问题。

我还要检查代码中某处是否存在用于BOOL的typedef或#define。双击代码中的BOOL,右键单击“显示定义”。