Ho creato una sottoclasse personalizzata di UIView insieme a un file xib e dichiarato IBOutlet e IBActions all'interno della classe personalizzata.UIView personalizzato caricato da Xib
@interface ContactUsView : UIView
@property (nonatomic, weak) IBOutlet UIButton *displayCloseButton;
- (IBAction)callButtonPressed:(id)sender;
- (IBAction)emailButtonPressed:(id)sender;
- (IBAction)displayCloseButtonPressed:(id)sender;
@end
Nel file xib ho trascinato un UIView per rappresentare la mia vista personalizzata. Ho impostato:
- file proprietario = alla mia classe personalizzata
- aver impostato il trascinato in UIView alla mia classe personalizzata.
Ho quindi aggiunto vari pulsanti che sono collegati ai 3 metodi sopra indicati.
All'interno del ContactUsView.m ho il seguente:
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"ContactUsView" owner:self options:nil];
for (id object in array) {
if ([object isKindOfClass:[ContactUsView class]])
self = (ContactUsView *)object;
}
}
return self;
}
Quando vengo a creare questo punto di vista faccio la seguente:
- (void)viewWillAppear:(BOOL)animated
{
ContactUsView *contactUs = [[ContactUsView alloc] initWithFrame:CGRectZero];
CGPoint origin = self.view.frame.origin;
CGSize size = self.view.frame.size;
[contactUs setFrame:CGRectMake(origin.x,
CGRectGetMaxY(self.view.frame) - 100,
size.width,
contactUs.frame.size.height)];
[self.view addSubview:contactUs];
}
Problema Quando premo su una delle i pulsanti con cui l'applicazione si arresta in modo anomalo con: Thread 1: EXC_BAD_ACCESS (codice = 2, indirizzo = 0xb0c
Qualcuno può aiutarmi con questo. Sento che sto probabilmente commettendo un errore da qualche parte riguardo alla creazione e caricamento di visualizzazioni personalizzate da xibs.
Se hai bisogno di ulteriori informazioni fammi sapere. Grazie molto.
Riferimento futuro Quando si crea una vista personalizzata utilizzando uno xib NON impostare il proprietario dei file. Invece crea tutti i tuoi IBOutlet e IBActions come faresti normalmente e quindi per agganciarli apri la scheda Utility e controlla il trascinamento da lì.
di poter postare l'intera errore? O la linea in cui si verifica effettivamente l'errore? Abilita i punti di interruzione sulle eccezioni in XCode. – KerrM
Se inserisco un punto di interruzione in uno dei metodi chiamati, non raggiunge mai il punto di interruzione. Si blocca solo con il codice sopra e nulla viene mostrato nell'output. Ho aggiunto un punto di interruzione "Tutte le eccezioni" e ancora non viene mostrato nulla nell'output. – pls