Commutation contrôleurs de vue se bloque avec une exception non capturée
-
05-10-2019 - |
Question
Je suis en train de changer de vue entre les contrôleurs de vue dans mon application iPhone, mais il est écrasé. Fondamentalement, je suis passer de mainScreen à tester.
J'obtiens une erreur dans le débogueur:
0x01d6a000 <+0000> push %ebp
0x01d6a001 <+0001> mov %esp,%ebp
0x01d6a003 <+0003> int3
0x01d6a004 <+0004> leave (HIGHLIGHTED)
0x01d6a005 <+0005> ret
0x01d6a006 <+0006> nopw %cs:0x0(%eax,%eax,1)
mainscreen.h
#import <UIKit/UIKit.h>
@interface MainScreen : UIViewController {
}
-(IBAction)btnFirstPage:(id)sender;
@end
mainscreen.m
#import "MainScreen.h"
#import "test.h"
@implementation MainScreen
-(IBAction)btnFirstPage:(id)sender{
test1 = [[test1 alloc]
initWithNibName:@"test" (test may not respond to -alloc)
bundle:nil];
[self.view addSubview:test1.view];
/* etc. */
test.h
#import <UIKit/UIKit.h>
@interface test : UIViewController {
}
@end
La solution
Cela semble étrange: test1 = [[test1 alloc] ...]
. Vous envoyez le message alloc
à une variable, que je suppose est d'abord le pointeur NULL, et est donc tranquillement ignoré. Vous devez appeler alloc
sur le type de classe de test1
, pas test1
lui-même.
Autres conseils
test1 = [[Test alloc] initWithNibName: @ "test" undle: nil]; // ici, il doit être testé. pas test1
Lorsque vous créez des objets de classes que vous devez utiliser des méthodes statiques alloc et allocWithZone utilisent dans la classe NSObject. Donc, vous devez utiliser le nom de classe. Pas le nom de la variable. (Test1)