首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型的表达式初始化“void(^)(struct ALAssetsGroup *,BOOL *)”时不兼容的块指针类型

类型的表达式初始化“void(^)(struct ALAssetsGroup *,BOOL *)”时不兼容的块指针类型
EN

Stack Overflow用户
提问于 2011-08-04 23:18:46
回答 2查看 7K关注 0票数 3

我在网上看到有几个人已经成功地使用了这段代码。但是我得到了不兼容的块指针错误:

不兼容的块指针类型初始化

代码语言:javascript
复制
void(^)(struct ALAssetsGroup *, BOOL *)

类型的表达式

代码语言:javascript
复制
void(^)(ALAsset *, NSUInteger, BOOL *)

有什么提示吗?(完整代码编辑)

代码语言:javascript
复制
    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");
                             }];

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-05 21:14:55

好的,街区的新手……但我在这里找到了另一个资产组枚举器块的示例,它的声明中没有struct。我尝试从上面的代码中删除它,但它仍然工作正常,并且没有错误消息。希望更了解struct的人能解释一下?

尝试更改此行:

代码语言:javascript
复制
void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) 
            = ^(ALAssetsGroup *group, BOOL *stop)

要这样做:

代码语言:javascript
复制
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) 
            = ^(ALAssetsGroup *group, BOOL *stop)

我认为底线是ALAssetsLibrary enumerateGroupsWithTypes: usingBlock:期望一个看起来像(ALAssetsGroup *, BOOL *)而不是(struct ALAssetsGroup *, BOOL *)的块。

票数 9
EN

Stack Overflow用户

发布于 2011-08-05 21:20:32

预期类型和实际类型之间的区别仅仅是工作结构,即struct ALAsset*ALAsset*。(在您的文字描述中,它看起来像是ALAssetALAssetGroups之间的不匹配,但我认为您在复制错误消息时犯了错误。)

我不太明白这些差异是从哪里来的(可能是因为在某个地方使用了C++?)。

无论如何,最好的解决方案是分别使用类型定义ALAssetsGroupEnumerationResultsBlockALAssetsLibraryGroupsEnumerationResultsBlock,例如:

代码语言:javascript
复制
ALAssetsGroupEnumerationResultsBlock assetEnumerator = ^(ALAsset *result, NSUInteger index, BOOL *stop){
    if (result != NULL) {
            NSLog(@"See Asset: %@", result);
        }
    };
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6944033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档