2010-10-28 3 views
2

Qu'est-ce qui pourrait causer ce plantage? De tout ce que j'ai lu, j'utilise la propriété correctement. Lorsque j'appelle la méthode loadDot2Dot une première fois, cela fonctionne correctement. Puis quand je reviens au menu principal (appel loadMainMenu) et essaye de charger le dot2DotVC encore (appelez loadDot2DotVC encore), j'obtiens un accident (Exc_Bad_Access) - sans plus d'information.Erreur de publication de propriété Objective-C

Lorsque je commente la [version d2d]; ligne dans loadDot2Dot ça fonctionne bien. Est-ce que je fais quelque chose de mal? Je sais que je devrais publierai là ...

Cheers,

Voici le .h

#import <UIKit/UIKit.h> 

@class MenuVC; 
@class Dot2DotVC; 

@interface MyViewController : UIViewController { 

    UIViewController *menuVC;   
    UIViewController *dot2DotVC;   

} 
@property (nonatomic, retain) UIViewController *menuVC; 
@property (nonatomic, retain) UIViewController *dot2DotVC; 


- (IBAction)loadMainMenu:(id)sender; 
- (IBAction)loadDot2Dot:(id)sender; 


@end 

Voici le .m

#import "MyViewController.h" 
#import "MenuVC.h" 
#import "Dot2DotVC.h" 

@implementation MyViewController 

@synthesize dot2DotVC; 
@synthesize menuVC; 

- (IBAction)loadMainMenu:(id)sender { 

    if(self.menuVC != nil){ 
     [self.menuVC.view removeFromSuperview]; 
    } 

    MenuVC *menuController = [[MenuVC alloc] initWithNibName:@"iPadMenuVC" bundle:nil]; 
    self.menuVC = menuController; 
    [menuController release]; 


    [self.view insertSubview:self.menuVC.view atIndex:0]; 
    if (self.dot2DotVC != nil) { 
     [self.dot2DotVC.view removeFromSuperview]; 
    } 
} 

- (IBAction)loadDot2Dot:(id)sender { 

    Dot2DotVC *dvc = [[Dot2DotVC alloc] initWithNibName:@"iPadDot2DotVC" bundle:nil]; 
    self.dot2DotVC = dvc; 

    [dvc release]; // If I comment out this release call, I don't get a crash. 

    [self.view insertSubview:dot2DotVC.view atIndex:0]; 
    if (self.menuVC != nil) { 
     [self.menuVC.view removeFromSuperview]; 
    } 
} 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    MenuVC *menuController = [[MenuVC alloc] initWithNibName:@"iPadMenuVC" bundle:nil];  
    self.menuVC = menuController; 
    [menuController release]; 

    [self.view insertSubview:self.menuVC.view atIndex:0];  
} 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning];  
    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil;  
} 


- (void)dealloc { 

    self.menuVC = nil;  
    self.dot2DotVC = nil; 
    [super dealloc];  
} 

-(BOOL)canBecomeFirstResponder { 
    return YES; 
} 

-(void)viewDidAppear:(BOOL)animated { 

    [self becomeFirstResponder]; 
} 

@end 

Ator/Documents/Princess_Pets/main. m: 14

Program received signal: “EXC_BAD_ACCESS”. (gdb) bt 
#0 0x30fb15fa in objc_msgSend() 
#1 0x314b9aca in CFRelease() 
#2 0x31525b58 in __CFTypeCollectionRelease() 
#3 0x31503522 in __CFArrayReleaseValues() 
#4 0x315038a2 in __CFArrayDeallocate() 
#5 0x314b9bc0 in _CFRelease() 
#6 0x314b9a9a in CFRelease() 
#7 0x30338038 in -[NSCFArray release]() 
#8 0x30fb29e8 in objc_setProperty() 
#9 0x0000f246 in -[Dot2DotVC setCurrentImages:] (self=0x13a310, 
_cmd=0x19a8c, newArray=0x0) at /Users/adminstrator/Documents/Princess_Pets/Classes/Dot2DotVC.m:42 
#10 0x0000ec36 in -[Dot2DotVC dealloc] (self=0x13a310, _cmd=0x33005660) at /Users/adminstrator/Documents/Princess_Pets/Classes/Dot2DotVC.m:1474 
#11 0x314ba71a in -[NSObject release]() 
#12 0x30fb29e8 in objc_setProperty() 
#13 0x00004452 in -[Princess_PetsViewController setDot2DotVC:] (self=0x11d800, 
_cmd=0x194f9, _value=0x145100) at /Users/adminstrator/Documents/Princess_Pets/Classes/Princess_PetsViewController.m:20 
#14 0x00003234 in -[Princess_PetsViewController loadDot2Dot:] (self=0x11d800, 
_cmd=0x1962e, sender=0x146840) at /Users/adminstrator/Documents/Princess_Pets/Classes/Princess_PetsViewController.m:107 
#15 0x314db16c in -[NSObject performSelector:withObject:withObject:]() 
#16 0x322930d4 in -[UIApplication sendAction:to:from:forEvent:]() 
#17 0x32293074 in -[UIApplication sendAction:toTarget:fromSender:forEvent:]() 
#18 0x32293046 in -[UIControl sendAction:to:forEvent:]() 
#19 0x32292d98 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]() 
#20 0x322933e6 in -[UIControl touchesEnded:withEvent:]() 
#21 0x32291dbc in -[UIWindow _sendTouchesForEvent:]() 
#22 0x32291704 in -[UIWindow sendEvent:]() 
#23 0x3228d326 in -[UIApplication sendEvent:]() 
#24 0x3228cc92 in _UIApplicationHandleEvent() 
#25 0x3414eb32 in PurpleEventCallback() 
#26 0x314d8d9c in CFRunLoopRunSpecific() 
#27 0x314d84e0 in CFRunLoopRunInMode() 
#28 0x3414e0da in GSEventRunModal() 
#29 0x3414e186 in GSEventRun() 
#30 0x32241430 in -[UIApplication _run]() 
#31 0x3223f95a in UIApplicationMain() 
#32 0x00002852 in main (argc=1, argv=0x2ffff60c) at /Users/adminstrator/Documents/Princess_Pets/main.m:14ator/Documents/Princess_Pets/main.m:14 
+0

Publiez la trace arrière à partir du rapport de panne ou de la base de données de gestion. Si vous déboguez, il est peu probable qu'il n'y ait pas d'autre information que 'EXC_BAD_ACCESS', sauf si vous avez détruit la mauvaise partie de la pile. –

+0

Merci pour la réponse. Désolé pour mon ignorance ... Est-ce que c'est ce que j'ai besoin de poster? – Dittimon

+0

course en cours ... [Mise à fileter 12035] [Mise à enfiler 12035] SharedLibrary apply-charge toutes les règles continuent Programme signal reçu: « EXC_BAD_ACCESS ». (gdb) – Dittimon

Répondre

0

A partir du backtrace, votre problème semble être directement dans Dot2DotVC. Dans son -dealloc, il appelle -setCurrentImages: sur self, qui libère l'ancienne valeur, qui semble contenir un objet garbage. En d'autres termes, la propriété de tableau currentImages sur votre Dot2DotVC contient au moins un objet non valide au moment où -dealloc est appelée sur le contrôleur de vue. En même temps, je vous encourage fortement à ne pas utiliser l'accès aux propriétés dans -dealloc. Le -dealloc vous avez indiqué dans votre question serait mieux que:

- (void)dealloc { 
    [menuVC release]; 
    [dot2DotVC release]; 
    [super dealloc]; 
} 

Cela permet d'éviter tout problème potentiel avec les organismes de redéfinis persistants observateurs KVO.

+0

Merci !!! c'était le problème. Très appréciée. – Dittimon

Questions connexes