我在网上看到有几个人已经成功地使用了这段代码。但是我得到了不兼容的块指针错误:
不兼容的块指针类型初始化
void(^)(struct ALAssetsGroup *, BOOL *)类型的表达式
void(^)(ALAsset *, NSUInteger, BOOL *)有什么提示吗?(完整代码编辑)
ALAssetsLibrary *library =[[ALAssetsLibrary alloc]init];
void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop){
if(result != NULL) {
NSLog(@"See Asset: %@", result);
}
};
void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {
if(group != nil) {NSLog(@"dont See Asset: ");
[group enumerateAssetsUsingBlock:assetEnumerator];
}
};
[library enumerateGroupsWithTypes:ALAssetsGroupAlbum
usingBlock:assetGroupEnumerator
failureBlock: ^(NSError *error) {
NSLog(@"Failure");
}];

发布于 2011-08-05 21:14:55
好的,街区的新手……但我在这里找到了另一个资产组枚举器块的示例,它的声明中没有struct。我尝试从上面的代码中删除它,但它仍然工作正常,并且没有错误消息。希望更了解struct的人能解释一下?
尝试更改此行:
void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *)
= ^(ALAssetsGroup *group, BOOL *stop)要这样做:
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *)
= ^(ALAssetsGroup *group, BOOL *stop)我认为底线是ALAssetsLibrary enumerateGroupsWithTypes: usingBlock:期望一个看起来像(ALAssetsGroup *, BOOL *)而不是(struct ALAssetsGroup *, BOOL *)的块。
发布于 2011-08-05 21:20:32
预期类型和实际类型之间的区别仅仅是工作结构,即struct ALAsset*与ALAsset*。(在您的文字描述中,它看起来像是ALAsset和ALAssetGroups之间的不匹配,但我认为您在复制错误消息时犯了错误。)
我不太明白这些差异是从哪里来的(可能是因为在某个地方使用了C++?)。
无论如何,最好的解决方案是分别使用类型定义ALAssetsGroupEnumerationResultsBlock或ALAssetsLibraryGroupsEnumerationResultsBlock,例如:
ALAssetsGroupEnumerationResultsBlock assetEnumerator = ^(ALAsset *result, NSUInteger index, BOOL *stop){
if (result != NULL) {
NSLog(@"See Asset: %@", result);
}
};https://stackoverflow.com/questions/6944033
复制相似问题