Приложение 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(@"Нет групп: %@", ошибка); }]; }
После этого приложение не аварийно завершало работу, но представление коллекции отображается с пустыми ячейками без миниатюр изображений. Я понятия не имею, что я делаю неправильно.