2011-06-22 4 views
0

J'ai une application où l'utilisateur peut prendre des photos à partir de la caméra et l'image est affichée en mode image. Il fonctionne très bien pour la première fois, mais la deuxième application de temps est écrasé la sortie du niveau d'alerte de mémoire = 1Programme reçu le signal 0 pour uiimagepickercontroller

I google autour et ai essayé tous les moyens possibles, mais aucune utilisation

Voici le code i utilisé dans mon application

 UIImagePickerController *imgpicker; 

     @property(nonatomic,retain) UIImagePickerController *imgpicker; 



     @synthesize imgpicker; 

     if(actionSheet.tag==1) 
      { 
       NSLog(@"button index:%i",buttonIndex); 
       if(buttonIndex == 0) 
       { NSLog(@"button index for camera:%i",buttonIndex); 
        if(self.imgpicker==nil){ 
        self.imgpicker=[[UIImagePickerController alloc]init]; 

        self.imgpicker.delegate =self; 
        self.imgpicker.sourceType=UIImagePickerControllerSourceTypeCamera; 

        } 

        [self presentModalViewController:self.imgpicker animated:YES]; 


        [imgpicker release]; 
        return; 

       } 
} 

     - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
     { 
      NSLog(@"didFinishPickingMediaWithInfo editing info:%@",info); 
      UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage]; 



      imageview = [[UIImageView alloc] initWithFrame:CGRectMake(65, 10, 75, 75)]; 



       NSData *newjpg = UIImageJPEGRepresentation(image, 0.5); 



      [imageview setImage:[UIImage imageWithData:newjpg]]; 



      [scrollView addSubview:imageview]; 



      [self.view addSubview:scrollView]; 

      [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 
    } 

S'il vous plaît aidez-moi

Répondre

1

Essayez de changer ceci:

self.imgpicker=[[UIImagePickerController alloc]init]; 

à ceci:

self.imgpicker=[[[UIImagePickerController alloc]init] autorelease]; 

et de supprimer cette ligne:

[imgpicker release]; 

Si vous montrant le sélecteur d'image plus d'une fois, vous fuite de mémoire de la vue de l'image qui obtient alloué chaque fois le sélecteur finit. Vous ajoutez également la vue de l'image à la vue déroulante et la vue défilée à la vue du contrôleur de vue à chaque fois. Vous avez juste besoin de le faire une fois, et la mise à jour de la propriété image sur la vue de l'image.

Essayez ceci:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    NSLog(@"didFinishPickingMediaWithInfo editing info:%@",info); 
    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage]; 

    if (imageview == nil) { 
     imageview = [[UIImageView alloc] initWithFrame:CGRectMake(65, 10, 75, 75)]; 
     [scrollView addSubview:imageview]; 
     [self.view addSubview:scrollView]; 
    } 

    NSData *newjpg = UIImageJPEGRepresentation(image, 0.5); 

    [imageview setImage:[UIImage imageWithData:newjpg]]; 

    [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 
} 
+0

@mortenfast: J'ai essayé votre code mais le même problème persiste. En fait, le scénario est, j'ai tableview quand je clique sur une des cellules du tableau une vue avec vue d'image et un bouton est poussé. Lorsque je clique sur le bouton, je reçois une feuille d'action avec "Prendre une photo", "PhotoLibrary" et "Annuler" bouton. Je capture une image de la caméra et l'affiche en vue d'image et reviens à tableview et si je vais pour une autre cellule et capture l'image de l'application de la caméra se bloque – duk

+0

Y at-il une trace de pile dans le journal de crash? –

+0

Aucune trace de pile, même je ne trouve pas de rapport d'erreur, juste un message "Programme reçu le signal 0" – duk

0

S'il vous plaît créer un objet UIImagePickerController dans votre classe AppDelegate et initialize dans votre méthode de AppDidFinishloading: didFinishLaunchingWithOptions. Realese le sur la méthode appDelegate dealloc. Vous pouvez y accéder depuis la page de contrôleur de vue requise depuis la classe appdelegate. Veuillez ne pas créer d'objet UIImagePickerController evertytime lorsque vous en avez besoin et que vous le réalisez.

Cela pourrait vous aider.

+0

pourriez-vous s'il vous plaît me fournir le code – duk

0

S'il vous plaît utiliser ce code:

délégué App // .h

#import <UIKit/UIKit.h> 

@interface MyProjectAppDelegate : NSObject <UIApplicationDelegate> { 

    UIImagePickerController *image_picker; 

    UIWindow *window; 
    UINavigationController *navigationController; 
} 
@property(nonatomic, retain) UIImagePickerController *image_picker; 
@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 

-(void)initializeImagePickerView; 

@end 

// .m

#import "MyProjectAppDelegate.h" 
#import "RootViewController.h" 

@implementation MyProjectAppDelegate 

@synthesize window; 
@synthesize navigationController,image_picker; 

#pragma mark - 
#pragma mark Application lifecycle 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after application launch. 
    [self initializeImagePickerView]; 

    // Set the navigation controller as the window's root view controller and display. 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

-(void)initializeImagePickerView 
{ 
    // Picker View 
    self.image_picker = [[UIImagePickerController alloc] init]; 
    self.image_picker.allowsImageEditing = YES; 
} 

- (void)dealloc { 
    [image_picker release]; 
    [navigationController release]; 
    [window release]; 
    [super dealloc]; 
} 
@end 

// RootView Controller // .h

#import <UIKit/UIKit.h> 
#import "MyProjectAppDelegate.h" 

@interface RootViewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate>{ 

    MyProjectAppDelegate *appDelegate; 
} 
-(IBAction)btnPhotoPressed:(id)sender; 
@end 

// .m

#import "RootViewController.h" 
@implementation RootViewController 

#pragma mark - 
#pragma mark View lifecycle 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    appDelegate = (MyProjectAppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 

-(IBAction)btnPhotoPressed:(id)sender 
{ 
    appDelegate.image_picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary; 
    appDelegate.image_picker.delegate=self; 
    [self presentModalViewController:appDelegate.image_picker animated:YES]; 
} 

#pragma mark UIImagePickerController delegate 
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    // Access the uncropped image from info dictionary 
    UIImage *imgCapturePhoto = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    // You can use image here 

    [self dismissModalViewControllerAnimated:YES]; 
} 
-(void)imagePickerControllerDidCancel:(UIImagePickerController *) picker 
{ 
    [picker dismissModalViewControllerAnimated:YES]; 
} 
- (void)dealloc { 
    [super dealloc]; 
} 

Cela va certainement vous aider.

+0

Merci d'avoir fourni le code, j'ai essayé mais le même problème persiste. J'ai un appareil avec la version 4.0 qui a été jailbreaké. Est-ce le travail? – duk

Questions connexes