2011-01-03 14 views
5

La mayoría de las veces, mi selector de imágenes funciona perfectamente (iOS 4.2.1). Sin embargo, si me desplazo muy rápido hacia arriba y hacia abajo unas 4 o 6 veces a través de mi rollo de cámara de aproximadamente 300 fotos, me da un accidente. Esto nunca ocurre con la aplicación "fotos" en el mismo iPhone 3G. Además, me doy cuenta de que la aplicación de "fotos" de stock se desplaza mucho más suavemente que mi selector de imágenes.UIImagePickerController se bloquea en el desplazamiento rápido, más lento que la aplicación de fotos

¿Alguien más ha notado este comportamiento? Me interesaría si otros pudieran intentar esto en sus propias aplicaciones y ver si fallan. No creo que esté relacionado con otros objetos que acaparan la memoria en mi iPhone porque es una aplicación simple, y esto sucede justo después de que inicie la aplicación. Tampoco parece estar relacionado con los mensajes enviados a otros objetos liberados ni con la liberación excesiva de otros objetos en viewdidunload, en función de mis registros de bloqueo y del hecho de que el simulador responde bien a las advertencias de memoria simuladas. Creo que podría ser un error en la implementación interna del UIImagePickerController ...

Así es como comienzo el selector. Lo he hecho de varias formas (incluida la configuración de una propiedad de retención para el UIImagePickerController en mi encabezado y su liberación en dealloc). Esta parece ser la mejor manera (se bloquea menos):

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

Este es el hilo estrellado (me da varios tipos de excepciones):

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

lo intentó, pero no pudo reproducir en iPad o iPhone 4, corriendo 4.2.1. ¿Depende de un rollo de fotos en particular? – mvds

+0

Bien SEGV_ACCERR insinúa que no tiene permisos de acceso. ¿Lo has intentado sin picker.allowsEditing = YES; ? – Erle

+0

Acabo de reproducir el problema en mi iPhone 3G con la demo del selector de http://bit.ly/beeRq y mi iPod Touch 4ta generación (fotos diferentes), así que no creo que sea necesariamente mi código o el rollo de fotos. .. También probé picker.allowsEditing = NO y el mismo problema. Realmente tiene que desplazar el selector tan rápido como sea posible hasta la parte superior de las fotos y volver a bajar varias veces para que se bloquee. –

Respuesta

10

me di cuenta de una solución que mejora enormemente el rendimiento de desplazamiento del selector de imágenes y elimina por completo los bloqueos. Lamentablemente, no sé por qué funciona.

En el código anterior, cambie:

picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 

a:

picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
+0

definitivamente es una solución, pero de alguna manera funciona :) – konradowy

+0

Sí, funciona. – Ter

Cuestiones relacionadas