我不久前写了一个要点:https://gist.github.com/611157.它编译并运行良好。
我最近又回来了,它不再遵守。
我注意到它使用LLVM 2.0编译,没有任何问题或警告(然后运行并工作!)
LLVM GCC 4.2无法编译。我得到以下错误
error: incompatible block pointer types initializing 'signed char (^)(struct objc_object *, struct NSString *)', expected 'BOOL (^)(struct objc_object *, struct objc_object *)'
我有一种感觉,我有一个申报遗漏或错误,但我不知道,所以我想我会问。
有什么想法吗?
问题是您的块具有类型:
BOOL (^blockRelationship)(id,id)
但是初始化中的第二个参数和方法声明中的参数类型都是NSString*
将块定义更改为
BOOL (^blockRelationship)(id,NSString*)=^(id obj,NSString* relationship) { ... } ;
我已经在GCC 4.2、GCC 4.2 LLVM和Clang LLVM 1.6中测试了以上内容。
对于id
第二个参数,在前两种情况下,我在初始化行和将其作为参数传递给toDictionaryBlockingRelationships:
的行上都出现了错误。
以NSString*
作为第二个参数,三个汇编都没有出现错误。