2011-01-03 2 views
5

В большинстве случаев мой фотоаппарат отлично работает (iOS 4.2.1). Однако, если я прокручиваю очень быстро вверх и вниз примерно 4-6 раз через мой фотокамер из примерно 300 фотографий, я получаю сбой. Это никогда не случается с приложением «фотографии» на тех же iPhone 3Gs. Кроме того, я замечаю, что приложение «фотографии» на складе прокручивается намного гладко, чем мой подборщик изображений.UIImagePickerController сбой при быстрой прокрутке, медленнее, чем приложение для фотографий

Кто-нибудь еще заметил это поведение? Мне было бы интересно, если другие могут попытаться это сделать в своих приложениях и посмотреть, сбой их. Я не думаю, что это связано с другими объектами, поддерживающими память на моем iPhone, потому что это простое приложение, и это происходит сразу после запуска приложения. Это также, похоже, не связано с сообщениями, отправленными на другие выпущенные объекты или перевыпусканием других объектов в viewdidunload, в зависимости от моих журналов сбоев и того факта, что имитатор хорошо реагирует на симулированные предупреждения памяти. Я думаю, что это может быть ошибкой во внутренней реализации UIImagePickerController ...

Вот как я начинаю сборщик. Я сделал это несколько способов (включая установку свойства сохранения для UIImagePickerController в моем заголовке и освобождение на dealloc). Это, кажется, лучший способ (аварии как минимум):

UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
picker.allowsEditing = YES;   
[self presentModalViewController:picker animated:YES]; 
[picker release]; 

Это разбившийся нить (я получаю различные типы исключений):

Exception Type: SIGSEGV 
Exception Codes: SEGV_ACCERR at 0xfffffffff4faafa4 
Crashed Thread: 8 
... 
Thread 8 Crashed: 
0 CoreFoundation  0x000494ea -[__NSArrayM replaceObjectAtIndex:withObject:] + 98 
1 PhotoLibrary  0x00008e0f -[PLImageTable _segmentAtIndex:] + 527 
2 PhotoLibrary  0x00008a21 -[PLImageTable _mappedImageDataAtIndex:] + 221 
3 PhotoLibrary  0x0000893f -[PLImageTable dataForEntryAtIndex:] + 15 
4 PhotoLibrary  0x000087e7 PLThumbnailManagerImageDataAtIndex + 35 
5 PhotoLibrary  0x00008413 -[PLThumbnailManager _dataForPhoto:format:width:height:bytesPerRow:dataWidth:dataHeight:imageDataOffset:imageDataFormat:preheat:] + 299 
6 PhotoLibrary  0x000b6c13 __-[PLThumbnailManager preheatImageDataForImages:withFormat:]_block_invoke_1 + 159 
7 libSystem.B.dylib 0x000d6680 _dispatch_call_block_and_release + 20 
8 libSystem.B.dylib 0x000d6ba0 _dispatch_worker_thread2 + 128 
9 libSystem.B.dylib 0x0007b251 _pthread_wqthread + 265 
+0

Пробовали, но не может воспроизвести на IPad или iPhone 4, работает 4.2.1. Это зависит от конкретного броска? – mvds

+0

Ну SEGV_ACCERR подсказывает, что у вас нет прав доступа. Вы пробовали без picker.allowsEditing = YES; ? – Erle

+0

Я только что воспроизвел проблему на своих iPhone 3Gs с демонстрацией сборщика от http://bit.ly/beeRq и моего iPod Touch 4-го поколения (разные фотографии), поэтому я не думаю, что это мой код обязательно или фото-бросок. .. Я также просто попробовал picker.allowsEditing = NO и та же проблема. Вам действительно нужно прокрутить сборщика, как сумасшедший, как можно быстрее, вплоть до верхней части фотографий и несколько раз отступить, чтобы он упал. –

ответ

10

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

В приведенном выше коде, изменения:

picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 

к:

picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
+0

определенно это обходное решение, но почему-то это работает :) – konradowy

+0

Да, он работает. – Ter

Смежные вопросы