2011-01-03 19 views
5

W większości przypadków mój selektor zdjęć działa idealnie (iOS 4.2.1). Jednakże, jeśli przewijam bardzo szybko w górę iw dół około 4-6 razy w rolce z aparatu około 300 zdjęć, pojawia się awaria. To się nigdy nie zdarza z aplikacją "zdjęcia" na tym samym telefonie iPhone 3G. Ponadto zauważam, że aplikacja "zdjęcia" w magazynie działa dużo płynniej niż mój selektor zdjęć.UIImagePickerController ulega awarii podczas szybkiego przewijania, wolniej niż aplikacja zdjęć

Czy ktoś jeszcze zauważył to zachowanie? Byłbym zainteresowany, gdyby inni mogli spróbować tego w swoich własnych aplikacjach i sprawdzić, czy się zawieszają. Nie sądzę, że jest to związane z innymi obiektami, które zajmują pamięć na moim iPhonie, ponieważ jest to prosta aplikacja i dzieje się to zaraz po uruchomieniu aplikacji. Nie wydaje się również być związany z wiadomościami wysyłanymi do innych zwolnionych obiektów lub przesadnych innych obiektów w viewdidunload, w oparciu o moje logi awarii i fakt, że symulator dobrze reaguje na symulowane ostrzeżenia dotyczące pamięci. Myślę, że może to być błąd w wewnętrznej implementacji UIImagePickerController ...

W ten sposób uruchamiam selektor. Zrobiłem to na wiele sposobów (w tym ustawienie właściwości retain dla UIImagePickerController w moim nagłówku i zwolnienie na dealloc). To wydaje się być najlepszym sposobem (wywala Najmniej):

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

To rozbił gwint (I uzyskać różne rodzaje wyjątków):

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

Próbowaliśmy go, ale nie mógł odtworzyć na iPad lub iPhone 4 z systemem 4.2.1. Czy to zależy od konkretnej rolki zdjęcia? – mvds

+0

Dobrze SEGV_ACCERR podpowiada, że ​​nie masz uprawnień dostępu. Próbowałeś już bez picker.allowsEditing = YES; ? – Erle

+0

Właśnie odtworzyłem problem na moim iPhone 3G z demo próbnika z http://bit.ly/beeRq i mojego iPod Touch 4th gen (różne zdjęcia), więc nie sądzę, że to mój kod koniecznie lub zdjęcie rolki. .. Po prostu próbowałem picker.allowsEditing = NO i ten sam problem. Naprawdę musisz przewijać próbnik jak szalony tak szybko, jak to możliwe, aż do samej góry zdjęcia i cofać się wiele razy, aby spowodować awarię. –

Odpowiedz

10

zorientowali się poprawkę, która znacznie poprawia wydajność przewijania selektora obrazu i całkowicie eliminuje awarie. Niestety, nie wiem, dlaczego to działa.

W powyższym kodzie, zmiany:

picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 

do:

picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
+0

zdecydowanie jest to obejście, ale jakoś działa :) – konradowy

+0

Tak, działa. – Ter

Powiązane problemy