简单案例。我想创建一个UIViewController来显示和响应简单的UITextField的输入。
看起来像这样......
正在正确显示视图,但只要点击文本字段,应用程序就会崩溃并出现异常“EXC_BAD_ACCESS ....”
我的猜测是代表的任命有问题,但我在查找问题时遇到了问题。任何的想法?我错过了什么?
进一步的发现。当我在AppDelegate中直接实例化这个viewcontroller 时,UITextField的委托实际上有效!!
但我实际上打算先创建一个“BoardViewController”类的实例然后创建“CardViewController”对象。这种嵌套导致委托失败。
作为参考。在我的App代表中:
BoardViewController *bvc = [[BoardViewController alloc] init];
[self.window setRootViewController:bvc];
Board中的我有一个“添加”按钮,可以触发CardViewControllers的创建
-(void) addCard:(id)touchEvent{
NSLog(@"<Board> Add");
CardViewController *cvc = [[CardViewController alloc]init];
[self.view addSubview:cvc.view];
}
然后CardViewController首先看起来像在xib中设置了委托。
答案 0 :(得分:0)
看起来您的CardViewController未初始化。你在哪里建议应该建造它?
答案 1 :(得分:0)
您需要正确初始化视图控制器。
CardViewController *objCardView = [[CardViewController alloc]initWithNibName:@"CardViewController" bundle:nil];
[self.view addSubview:objCardView.view];
如果这样做,那么检查一下:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization}
}
return self;
}
您班级的这种方法正在运行,然后检查ViewDidLoad。
然后你还需要检查你是否正确实现了textField Delegate。使用属性初始化textField并创建连接文件所有者。
使用Break Point调试代码。我希望这会对你有所帮助。
答案 2 :(得分:0)
看起来我找到了解决方案。而不是仅仅将CardViewController的视图添加为子视图我还需要将其添加为ChildViewController。
在父BoardViewController中
-(void) addCard:(id)touchEvent{
CardViewController *cvc = [[CardViewController alloc]init];
[self addChildViewController:cvc];
[self.view addSubview:cvc.view];
}
然后委托调用工作。耶。