Приложение ios падает для некоторых пользователей при использовании ALAssetsLibrary для получения изображений в UICollectionView

У меня есть приложение IOS, я имею доступ к изображениям из галереи, используя ALAssetLibrary для заполнения UICollectionView. Он отлично работает для тестовых пользователей в Индии (моя родная страна), но не работает на устройствах нашего клиента в США. Это происходит сбой, когда клиент открывает представление коллекции со следующей ошибкой:

Неустранимое исключение: NSInvalidArgumentException
*** -[__NSArrayM insertObject:atIndex]: объект не может быть нулем резьбы: Неустранимое исключение: NSInvalidArgumentException
    0  CoreFoundation                 0x182ef9900 __exceptionPreprocess
    1  libobjc.A.dylib                0x182567f80 objc_exception_throw
    2  CoreFoundation                 0x182de3134       CFStringConvertNSStringEncodingToEncoding
    3  QuikCom                        0x10009e594 __27-[ImageSelector loadAssets]_block_invoke_2 (ImageSelector.m:65)
    4  AssetsLibrary                  0x18c74ba4c __62-[ALAssetsGroup _enumerateAssetsAtIndexes: варианты:usingBlock:]_block_invoke147
    5  CoreFoundation                 0x182df0370 __53-[__NSArrayM enumerateObjectsWithOptions:usingBlock:]_block_invoke
    6  CoreFoundation                 0x182df0268 -[__NSArrayM enumerateObjectsWithOptions:usingBlock:]
    7  AssetsLibrary                  0x18c74b520 -[ALAssetsGroup _enumerateAssetsAtIndexes: параметры:usingBlock:]
    8  QuikCom                        0x10009e4a4 __27-[ImageSelector loadAssets]_block_invoke (ImageSelector.m:60)
    9 Библиотека ресурсов 0x18c74d8eB: 0 k_invoke_3
    10 CoreFoundation                 0x182df0370 __53-[__NSArrayM enumerateObjectsWithOptions:usingBlock:]_block_invoke
    11 CoreFoundation                 0x182df01e0 -[__NSArrayM enumerateObjectsWithOptions:usingBlock: 12] AssetsLibrary                  0x18c74d83c __68-[ALAssetsLibrary enumerateGroupsWithTypes:usingBlock:failureBlock:]_block_invoke_2
    13 libdispatch.dylib              0x18294d630 _dispatch_call_block_and_release
    14 libdispatch.dylib              0x18294d5f0 _dispatch_client_callout
    15 libdispatch.dylib              0x182952cf8 _dispatch_main_queue_callback_4CF
    16 CoreFoundation                 0x182eb0bb0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
    17 CoreFoundation                 0x182eaea18 __CFRunLoopRun
    18 CoreFoundation                 0x182ddd680 CFRunLoopRunSpecific
    19 GraphicsServices               0x1842ec088 GSEventRunModal
    20 UIKit                          0x187c54d90 UIApplicationMain
    21 QuikCom                        0x1000a1258 Основной (main.m:14)
    22 libdispatch.dylib              0x18297e8b8 (Отсутствует)

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

- (недействительными)loadAssets{

    __block ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [библиотека enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

        if (group == nil) {
            вернуть;
        }

        [группа setAssetsFilter:[ALAssetsFilter allPhotos]];

        if ( group!= nil && [group numberOfAssets] > 0) {
            [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *alAsset, индекс NSUInteger, BOOL *innerStop) {

                if (alAsset) {

                    ALAssetRepresentation * представление = [alAsset defaultRepresentation];
                    UIImage *latestPhotoThumbnail =  [UIImage imageWithCGImage:[alAsset thumbnail]];

                    if (presentation!= nil && presentation.url!= nil && latestPhotoThumbnail!= NULL) {
                        [urlArray addObject: presentation.url];
                        [thumbsArr addObject:latestPhotoThumbnail];
                        представление = ноль;
                        latestPhotoThumbnail = ноль;
                    }

                } Еще {
                    библиотека = ноль;
                    [_collectionView reloadData];
                }
            }];
        }

        [_collectionView reloadData];

    } faultBlock: ^(NSError *error) {

        //NSLog(@"Нет групп: %@", ошибка);
    }];
}

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

0 ответов

Другие вопросы по тегам