设备未连接时,Xcode编译错误

我正在试图通过使用这个片段做一个简单的animation:

[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(^)(BOOL)'”types的参数发送'void(^)(uint_8t)'的不可比较块指针types。

如果我尝试将“BOOL”更改为“bool”,则在iPad Air上进行编译时,代码可以正常工作,但当断开iPad连接并尝试模拟器时,出现同样的错误,但具有不同的types:

“void(^)(BOOL)'”types的参数发送'void(^)(bool)'的不可阻塞指针types。

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

PS我也会在 – (void)viewWillDisappear:(bool)animation方法中得到不兼容types的警告。 当我连接iPad时,它们也会消失,当它断开连接时会再次出现。

编辑:—-这个代码甚至会导致错误:

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

同样在BOOL字段上。 而且错误是相同的,相互矛盾的参数types。

BOOL是一个不同的types,取决于你是否编译32位或64位。 有不同的types使用像布尔,布尔,布尔加上可能其他人 – 确保你在任何地方使用相同的types。

插入你的设备意味着代码将被编译为你的设备,而不是模拟器,所以这可以改变32位和64位,并触发问题。

我也会检查是否有一个typedef或#define BOOL代码中的某个地方。 在代码中双击BOOL,右键单击并显示定义。