NSRangeException с использованием - [ALAssetsGroup enumerateAssetsUsingBlock:] - PullRequest
2 голосов
/ 28 ноября 2011

В настоящее время я использую довольно стандартный код для перечисления активов в группе. За исключением теперь у меня есть новая ошибка

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSOrderedSet enumerateObjectsAtIndexes:options:usingBlock:]: index 46 beyond bounds [0 .. 45]'

Вот код, который я использую.

 [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
            NSLog(@"Asset %@", result);
            if (result != nil)
            {
                Asset *asset = [provider newAsset];
                asset.date = [result valueForProperty:ALAssetPropertyDate];
                id duration = [result valueForProperty:ALAssetPropertyDuration];
                asset.duration =  [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%@", duration]];
                CLLocation *location = [result valueForProperty:ALAssetPropertyLocation];
                asset.location = [location description];
                asset.orientation = [result valueForProperty:ALAssetPropertyOrientation];
                asset.type = [result valueForProperty:ALAssetPropertyType];
                NSDictionary *urls = [result valueForProperty:ALAssetPropertyURLs];
                for (NSString * key in urls) {
                    NSLog(@"Url = %@",[urls objectForKey:key]);
                    asset.url = [NSString stringWithFormat:@"%@", [urls objectForKey:key]];
                }

                [assetGroup addAssetsObject:asset];

                [asset release]; // Corrected based on comments

            }
        }];

Объект провайдера - мой пользовательский провайдер базы данных. Но устранение этого кода не приносит пользы. верхний NSLog никогда не запускается, что говорит мне, что код перечисления имеет проблему вне моего контроля. Кто-нибудь еще испытывал это?

Ответы [ 3 ]

0 голосов
/ 18 мая 2012

Я вижу ту же проблему.Это ошибка на стороне Apple.

Они выполняют блок перечисления в отдельном потоке и выходят за пределы.Какой позор!Я не могу найти способ даже поймать это.Приложение вылетает, и вы ничего не можете сделать, пока их библиотека не исправит себя.

Изменение рулона камеры или иногда запуск iPhoto для iPad решает проблему, но она возвращается.К счастью, это случается не слишком часто, но Apple должна на это отреагировать.

0 голосов
/ 20 августа 2012

Эту ошибку можно обойти, установив фильтры для фотографий, затем видео и перечисляя для каждого из них по очереди вместо сохранения его в «активах» по умолчанию.

Я разместил подробности здесь: ALAssetsLibrary, кажется, возвращает неправильное количество моих фотографий

0 голосов
/ 06 декабря 2011

Что-то запуталось в моей фото-библиотеке. После очистки моих фотографий и повторного запуска приложения, эта проблема больше не возникает.

Конечно, я хотел бы знать, в чём была настоящая проблема и почему библиотека Assets пыталась перечислить за пределы.

...