Сравнение ALAssetGroupType в операторе switch - PullRequest
2 голосов
/ 11 декабря 2010

Привет, я звоню ALAssetsLibrary's

-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 Ответ

6 голосов
/ 11 декабря 2010

valueForProperty: возвращает объект. В случае ALAssetsGroupPropertyType он возвращает константу ALAssetGroupType , заключенную в NSNumber . (См. документы здесь .)

Итак, приведя к ALAssetGroupType, вы используете адрес памяти объекта в качестве значения переключателя. Вам необходимо получить базовое целочисленное значение NSNumber, используя intValue:

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