Сбой приложения при выборе медиа из библиотеки, за исключением того, что в массив вставляется нулевой элемент
У меня есть старое приложение, для которого моя компания по-прежнему предоставляет устаревшую поддержку.
Есть странная ошибка, которая происходит с некоторыми из наших клиентов, но не с нашей стороны. По-видимому, это происходит, когда пользователь выбирает какое-то изображение из ImagePickerController.
исключение
Исключение говорит:
Фатальное исключение: NSInvalidArgumentException
- [PSImageViewController imagePickerController: didFinishPickingMediaWithInfo:] - [__ NSPlaceholderArray initWithObjects: count:]: попытка вставить нулевой объект из объектов [0]
Трассировки стека
Трассировка стека:
Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x2017b7ea0 __exceptionPreprocess
1 libobjc.A.dylib 0x200989a40 objc_exception_throw
2 CoreFoundation 0x20172f470 _CFArgv
3 CoreFoundation 0x2016a85f4 -[__NSPlaceholderArray initWithObjects:count:]
4 CoreFoundation 0x2017b3600 __createArray
5 CoreFoundation 0x2016b0584 +[NSArray arrayWithObject:]
6 MyAppName 0x102191378 -[PSImageViewController imagePickerController:didFinishPickingMediaWithInfo:] (PSImageViewController.m:221)
7 UIKitCore 0x22e30e30c -[UIImagePickerController _imagePickerDidCompleteWithInfo:]
8 PhotoLibrary 0x214add528 (Missing)
9 CameraUI 0x21f38c728 -[CAMImagePickerCameraViewController _handleCapturedImagePickerPhotoWithCropOverlayOutput:]
10 AssetsLibraryServices 0x20f173814 __pl_dispatch_sync_block_invoke
11 libdispatch.dylib 0x2011f2484 _dispatch_client_callout
12 libdispatch.dylib 0x20119f6b0 _dispatch_async_and_wait_invoke
13 libdispatch.dylib 0x2011f2484 _dispatch_client_callout
14 libdispatch.dylib 0x20119e9b4 _dispatch_main_queue_callback_4CF$VARIANT$mp
15 CoreFoundation 0x201747dd0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
16 CoreFoundation 0x201742c98 __CFRunLoopRun
17 CoreFoundation 0x2017421cc CFRunLoopRunSpecific
18 GraphicsServices 0x2039b9584 GSEventRunModal
19 UIKitCore 0x22e985054 UIApplicationMain
20 MyAppName 0x1020d60fc main (main.m:17)
21 libdyld.dylib 0x201202bb4 start
Код
Мой код для делегата ImagePickerController:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
if([info objectForKey:UIImagePickerControllerEditedImage])
{
self.image = [info valueForKey:UIImagePickerControllerEditedImage];
}
else
{
self.image = [info valueForKey:UIImagePickerControllerOriginalImage];
}
[self.imgProperty setImage:self.image];
[[PSDataPersistenceManager sharedManager] updateModificationStatusOfAppointments:[NSArray arrayWithObject:self.propertyObj.propertyToAppointment] toModificationStatus:[NSNumber numberWithBool:YES]];
[self dismissViewControllerAnimated:YES completion:nil];
}
Как видите, я не делаю здесь ничего, что могло бы вызвать это исключение. Код, который открывает imagePicker:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
CLS_LOG(@"Clicked Index %d",buttonIndex);
if (actionSheet.tag == 1)
{
if (buttonIndex != actionSheet.cancelButtonIndex)
{
if (buttonIndex == actionSheet.firstOtherButtonIndex)
{
[self showCameraOfSourceType:UIImagePickerControllerSourceTypeCamera];
}
else if (buttonIndex == actionSheet.firstOtherButtonIndex + 1)
{
[self showCameraOfSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; return;
}
}
}
}
Конкретная линия в следе PhotoLibrary 0x214add528 (Missing)
очень любопытно Я думаю, что у пользователя нет PhotoLibrary или что для Imagepicker выбран неправильный медиа-источник. Либо это
[[PSDataPersistenceManager sharedManager] updateModificationStatusOfAppointments:[NSArray arrayWithObject:self.propertyObj.propertyToAppointment] toModificationStatus:[NSNumber numberWithBool:YES]];
что вызывает проблему с self.propertyObj.propertyToAppointment
как-то быть нулевым? Я проверил, это не может быть нулевым. Или было бы больше сбоев на этом экране. Это всегда верно в моих тестовых прогонах.
Как я могу исправить этот сбой?
1 ответ
Ошибка из строки 221. Вы создаете массив с:
[NSArray arrayWithObject:self.propertyObj.propertyToAppointment]
Ошибка говорит вам, что self.propertyObj.propertyToAppointment
является nil
,