比较switch语句中的ALAssetGroupType

时间:2010-12-11 17:53:15

标签: iphone switch-statement objective-c-blocks constant-expression

您好我正在调用ALAssetsLibrary的

-enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:block failureBlock:failure;

然后在枚举块中我想比较返回的组的类型并将其添加到相关的数组。我试过了

^( ALAssetsGroup *group, BOOL *stop )
{
    NSLog(@"Group %@", group );
    ALAssetGroupType assetType = (ALAssetGroupType)[group valueForProperty:ALAssetsGroupPropertyType];
    NSLog( @"Asset type %@", assetType );
    switch( assetType )
    {
        case ALAssetsGroupAplbum :
        NSLog( @"Found ALBUM" );
        [albums addObject:group];
        break;
    }
}

初始日志追溯“组ALAssetsGroup - 名称:照片库,类型:专辑,资产数量:177”

下一个日志是“资产类型2”

但第三个日志永远不会被调用。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:6)

valueForProperty:返回一个对象。在ALAssetsGroupPropertyType的情况下,它返回包含在NSNumber 中的ALAssetGroupType常量。 (见docs here。)

因此,通过转换为ALAssetGroupType,您将使用对象的内存地址作为切换值。您需要使用intValue获取NSNumber的基础整数值:

ALAssetGroupType assetType = 
 [[group valueForProperty:ALAssetsGroupPropertyType] intValue];