UITextFieldDelegate导致异常

时间:2013-01-06 11:32:37

标签: objective-c ios delegates uitextfield uitextfielddelegate

简单案例。我想创建一个UIViewController来显示和响应简单的UITextField的输入。

  1. 我创建了一个包含 xib 文件的UIViewController。
  2. 在Interface Builder中,我添加了查看和包含 UITextField 的内容。
  3. 文件的所有者设置为包含逻辑“CardViewController”的相应类名。
  4. 文件所有者指向视图视图。
  5. 文本字段使用文件所有者作为委托
  6. 看起来像这样......

    enter image description here

    正在正确显示视图,但只要点击文本字段,应用程序就会崩溃并出现异常“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中设置了委托。

3 个答案:

答案 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];
}

然后委托调用工作。耶。