1

J'ai un problème avec le UIImagePickerController présenté avec presentModalViewController. Dès que la vue s'affiche (appareil photo ou album photo), l'application se bloque.Problème avec UIImagePickerController

L'interface utilisateur entière est créée en code, pas de constructeur d'interface. Cela a seulement cessé de fonctionner depuis que j'ai mis à jour le code pour fonctionner sur ios4. En utilisant des fuites, je n'en trouve pas, et l'allocation totale de mémoire que j'obtiens est d'environ 5mb.

Voici le code que j'utilise pour présenter le sélecteur de caméra -

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera]; 
[imagePicker setDelegate:self]; 
[imagePicker setAllowsEditing:YES]; 
[imagePicker setCameraCaptureMode:UIImagePickerControllerCameraCaptureModePhoto]; 
[self presentModalViewController:imagePicker animated:YES]; 
[imagePicker release]; 

Et les délégués comme suit -

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *selectedImage = [info objectForKey:UIImagePickerControllerEditedImage]; 
    UIImage *newImage = [self createGameImage:selectedImage]; 
    [gameOptionsImageDisplay setImage:[self resizeImage:newImage toSize:CGSizeMake(95, 95)]]; 
    [self dismissModalViewControllerAnimated:YES]; 
    [mainView setFrame:CGRectMake(0, 0, 320, 480)]; 
} 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    [mainView setFrame:CGRectMake(0, 0, 320, 480)]; 
} 

Réglage NSZombiesEnabled YES me dit -

*** -[UIImage isKindOfClass:]: message sent to deallocated instance 0x142fc0 

Et la trace de la pile est la suivante -

0 0x313f7d7c in ___forwarding___ 
1 0x3138a680 in __forwarding_prep_0___ 
2 0x3166dad2 in -[UIImageView(UIImageViewInternal) _canDrawContent] 
3 0x3166c652 in -[UIView(Internal) _didMoveFromWindow:toWindow:] 
4 0x3166c50e in -[UIView(Internal) _didMoveFromWindow:toWindow:] 
5 0x3166c50e in -[UIView(Internal) _didMoveFromWindow:toWindow:] 
6 0x3166c50e in -[UIView(Internal) _didMoveFromWindow:toWindow:] 
7 0x3166c50e in -[UIView(Internal) _didMoveFromWindow:toWindow:] 
8 0x3166aa8a in -[UIView(Hierarchy) _postMovedFromSuperview:] 
9 0x31672df6 in -[UIView(Hierarchy) removeFromSuperview] 
10 0x316d76ee in -[UITransitionView _didCompleteTransition:] 
11 0x31754556 in -[UITransitionView _transitionDidStop:finished:] 
12 0x316bc97a in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] 
13 0x316bc884 in -[UIViewAnimationState animationDidStop:finished:] 
14 0x33e487c0 in run_animation_callbacks 
15 0x33e48662 in CA::timer_callback 
16 0x313caa5a in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ 
17 0x313ccee4 in __CFRunLoopDoTimer 
18 0x313cd864 in __CFRunLoopRun 
19 0x313768ea in CFRunLoopRunSpecific 
20 0x313767f2 in CFRunLoopRunInMode 
21 0x329f36ee in GSEventRunModal 
22 0x329f379a in GSEventRun 
23 0x316692a6 in -[UIApplication _run] 
24 0x31667e16 in UIApplicationMain 
25 0x00002726 in main at main.m:14 

Si quelqu'un peut m'aider ici, je serais éternellement reconnaissant!

Merci,

Stewart

+0

Je voudrais en savoir un peu plus sur votre contrôleur de vue. Il y a une UIImage qui a l'air d'être en double release ... Y a-t-il des propriétés UIImage dans votre contrôleur de vue? En outre, je suis sûr que vous avez traité ceci, et cela conduirait à un message d'erreur différent, mais vous êtes conscient que vous ne pouvez pas utiliser l'appareil photo sur le simulateur? Il est préférable de tester les capacités de l'utilisateur, sinon il générera une exception sur un iPod Touch. En outre, pouvez-vous confirmer via les points d'arrêt que le code n'atteint jamais les rappels de vos délégués? – makdad

+1

Je pense que le problème est dans le parent 'UIViewController'. Vous dites que vous le créez par programme. Pouvez-vous montrer le code? –

+0

@phooze - Oui, je suis en train de tester si une caméra est disponible avant que l'option ne s'affiche et que cela fonctionne correctement. @ St3fan - Le code qui appelle le sélecteur est une sous-classe de UIViewController, et il est créé dans le délégué de l'application et ajouté à la fenêtre. J'ai depuis remplacé le sélecteur d'image avec un nouveau UIViewController avec un seul UIView avec une belle couleur d'arrière-plan rouge et pendant que la vue s'affiche sur presentModalViewController, il se bloque dès qu'il est terminé dans la fenêtre. BAH! – hiptomorrow

Répondre

2

je publierai une image qui a été également autoreleased. À l'occasion, le code fonctionnerait, mais la plupart du temps il tombait. En 3.2, cela ne m'avait pas causé d'erreurs ou montré, donc les chances sont qu'il n'était pas autoeleased pendant que j'en avais encore besoin. Beaucoup d'essais et d'erreurs l'ont trouvé.