Сравнение ALAssetGroupType в операторе switch
Привет, я звоню 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 ответ
Решение
valueForProperty:
возвращает объект. В случае ALAssetsGroupPropertyType
он возвращает константу ALAssetGroupType, заключенную в NSNumber. (Смотрите документы здесь.)
Итак, приведя к ALAssetGroupType
вы используете адрес памяти объекта в качестве значения переключателя. Вам нужно получить базовое целочисленное значение NSNumber, используя intValue
:
ALAssetGroupType assetType =
[[group valueForProperty:ALAssetsGroupPropertyType] intValue];