presentPopoverFromRect:inView:permitedArrowDirections:animated travando no iOS 6.0 [duplicado]
-
11-12-2019 - |
Pergunta
Acabei de atualizar do iOS 5.1.1 para 6.0 e o seguinte caminho de código está travando com o SIGTRAP quando ele tenta exibir um popover com um imagePickerViewController como seu contentVC para permitir que o usuário selecione uma imagem ou vídeo da photoLibrary.
Estava funcionando muito bem com 5.1.1.Estou solucionando isso há alguns dias, sem progresso.Alguém sabe disso?Existe um método alternativo para usar no iOS6.0?Posso adicionar mais código, se necessário ...
Posso capturar imagens e vídeos com a linha:
[self presentViewController:self.imagePickerViewController.imagePickerController animated:YES completion:NULL];
Aqui está o método completo chamado depois que o usuário toca em um UIButton.
- (void)showImagePicker:(UIImagePickerControllerSourceType)sourceType mediaType:(NSString *)mediaType
{
if (self.capturedMovies.count > 0)
[self.capturedMovies removeAllObjects];
if ([UIImagePickerController isSourceTypeAvailable:sourceType])
{
[self.imagePickerViewController setupImagePicker:sourceType mediaType:mediaType];
if (sourceType == UIImagePickerControllerSourceTypeCamera) { // WORKS
[self presentViewController:self.imagePickerViewController.imagePickerController animated:YES completion:NULL];
}
else if (sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
//else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie] || [mediaType isEqualToString:(NSString *)kUTTypeImage]) {
if (!self.moviePickerPopoverController) {
self.moviePickerPopoverController = [[UIPopoverController alloc] initWithContentViewController:self.imagePickerViewController.imagePickerController];
}
UIView *uiViewObject = self.mediaTitleTextField;
CGFloat xLocation = uiViewObject.frame.origin.x;
CGFloat yLocation = uiViewObject.frame.origin.y;
CGFloat width = uiViewObject.bounds.size.width;
CGFloat height = uiViewObject.bounds.size.height;
// CRASHES HERE!!!
[self.moviePickerPopoverController presentPopoverFromRect:CGRectMake(xLocation, yLocation, width, height)
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
}
}
Aqui está o que aparece na janela de código:
Tópico 1:sinal SIGTRAP na linha 3:
libsystemkernel.dylib`_kill:
0x394e7830: mov r12, #37
0x394e7834: svc #128
0x394e7838: blo 0x394e7850 ; __kill + 32 <<<<<<<<< Thread 1: signal SIGTRAP
0x394e783c: ldr r12, [pc, #4] ; __kill + 24
0x394e7840: ldr r12, [pc, r12]
0x394e7844: b 0x394e784c ; __kill + 28
0x394e7848: ldrdeq r6, r7, [r0], -r12
0x394e784c: bx r12
0x394e7850: bx lr
Aqui está o backtrace do depurador:
(lldb) bt
* thread #1: tid = 0x2503, 0x394e7838 libsystem_kernel.dylib`__kill + 8, stop reason = signal SIGTRAP
frame #0: 0x394e7838 libsystem_kernel.dylib`__kill + 8
frame #1: 0x001275d4 MyAppName`TFHandleExceptions + 992
frame #2: 0x36bd357e CoreFoundation`__handleUncaughtException + 614
frame #3: 0x39313a64 libobjc.A.dylib`_objc_terminate() + 128
frame #4: 0x3363c07a libc++abi.dylib`safe_handler_caller(void (*)()) + 78
frame #5: 0x3363c114 libc++abi.dylib`std::terminate() + 20
frame #6: 0x3363d598 libc++abi.dylib`__cxa_rethrow + 88
frame #7: 0x393139d0 libobjc.A.dylib`objc_exception_rethrow + 12
frame #8: 0x36b19f20 CoreFoundation`CFRunLoopRunSpecific + 456
frame #9: 0x36b19d48 CoreFoundation`CFRunLoopRunInMode + 104
frame #10: 0x38ca82ea GraphicsServices`GSEventRunModal + 74
frame #11: 0x3701d300 UIKit`UIApplicationMain + 1120
frame #12: 0x000629b0 MyAppName`main + 96 at main.m:16
Solução
Esta é uma duplicata de https://stackoverflow.com/a/12575058/1074338
Além disso, eu deveria ter tocado no botão ir do depurador...que revelou o código ofensivo:
*** Terminating app due to uncaught exception
'UIApplicationInvalidInterfaceOrientation',
reason: 'Supported orientations has no common orientation
with the application, and shouldAutorotate is returning YES'