不兼容的块指针类型

时间:2014-06-13 03:45:32

标签: objective-c ios7

我收到错误:

Incompatible block pointer types assigning to 'void (^__strong)(NSString *__strong, NSInteger)' from 'void (^__strong)(NSString *__strong, int)'

对于此代码:

-(void)showInView:(UIView *)view withCompletionHandler:(void (^)(NSString *, int))handler{
_completionHandler = handler;
}

其中:

@property (nonatomic, strong) void(^completionHandler)(NSString *, NSInteger);

这似乎应该是一个非常非常简单的解决方案,但我不太了解它是否可以运行。

1 个答案:

答案 0 :(得分:4)

我认为你正试图为64位目标构建它? NSInteger定义如下:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

因此,在为64位平台构建时,NSInteger将被long类型替换,这会导致此错误,因为您尝试将int作为参数分配给属性期待一个需要很长时间的块。你应该使用这个:

-(void)showInView:(UIView *)view withCompletionHandler:(void (^)(NSString *, NSInteger))handler{
    _completionHandler = handler;
}