UITextFieldDelegate导致异常
简单案例。我想创建一个UIViewController来显示和响应一个简单的UITextField的输入。UITextFieldDelegate导致异常
- 我创建了一个UIViewController,其中包括xib文件。
- 在界面生成器中,我添加了一个视图和一个包含UITextField。
- 文件的所有者设置为包含逻辑“CardViewController”的相应类名称。
- 文件所有者指向视图为视图。
- 的文本字段使用文件的所有者为代表。
它看起来像这样...
被正确显示的视图,但只要我点击文本字段与异常应用程序崩溃“EXC_BAD_ACCESS ......”
我的猜测是委托人的委托有问题,但我在找到问题时遇到问题。任何想法?我错过了什么?
其他发现。当我在AppDelegate中直接实例化这个视图控制器时,UITextField的委托实际上起作用!!
但是我实际上打算先创建一个“BoardViewController”类的实例,然后创建“CardViewController”对象。拥有这种嵌套会导致委派失败。
作为参考。在我的应用程序委托:
BoardViewController *bvc = [[BoardViewController alloc] init];
[self.window setRootViewController:bvc];
在董事会类我有一个“添加”按钮触发CardViewControllers
-(void) addCard:(id)touchEvent{
NSLog(@"<Board> Add");
CardViewController *cvc = [[CardViewController alloc]init];
[self.view addSubview:cvc.view];
}
,然后看起来在第一次提到了代表团作为CardViewController的创建在xib中设置。
它看起来像我找到我的解决方案。我不需要仅将CardViewController的视图添加为子视图,而是需要将其添加为ChildViewController。
在父BoardViewController
-(void) addCard:(id)touchEvent{
CardViewController *cvc = [[CardViewController alloc]init];
[self addChildViewController:cvc];
[self.view addSubview:cvc.view];
}
然后则委托调用的作品。好极了。
看起来像您的CardViewController未初始化。你认为它应该在哪里建造?
但是它是通过“CardViewController * cvc = [[CardViewController alloc] init]; [self.view addSubview:cvc.view];”它正在显示。只有当我点击文本框时,应用程序崩溃。 – Bernd
它应该通过initWithNibName构造,因为它存储在nib中。 –
我认为init应该以相同的名字自动获取正确的nib/xib。无论如何,我试过“CardViewController * cvc = [[CardViewController alloc] initWithNibName:@”CardViewController“bundle:nil]”。不幸的是它仍然崩溃。 – Bernd
您需要正确初始化您的视图控制器。
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委托。用属性初始化textField并建立连接File Owner。
使用断点调试您的代码。我希望这能帮到您。
是的。真正。谢谢。我忘了在测试后直接在AppDelegate中实例化CardViewController来更改它。我纠正了它。 – Bernd