我创建的iPhone一个简单的项目,使用的Xcode和Interface Builder。虽然我明白委托是什么,我有一个问题,使用它。

我在我的接口的的UITextField。它显示键盘当用户点击它,但我需要手动编程如何隐藏键盘。它可以使用委托来完成。因此,在IB,我正在从对象库,给它的类名Control1Delegate,然后从我的文本框的委托出口连接到成为这个Control1Delegate。我也有.M和.h文件这个Control1Delegate类:

Control1Delegate.h

@interface Control1Delegate : NSObject <UITextFieldDelegate> {
}

- (BOOL) textFieldShouldReturn:(UITextField *)textField;

@end

Control1Delegate.m

#import "Control1Delegate.h"

@implementation Control1Delegate

- (BOOL) textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

@end

但是,这并不工作。在运行时,它只是从来没有达到无味精或EXEC_BAD_ACCESS的textFieldShouldReturn方法或崩溃。有趣的是,当我移动的方法引入控制文件(一个向导生成的),并从的UITextField连接到这个控制器(文件的所有者),一切正常。我看到,大多数苹果代码教程把委托方法分为随机对象而不是单独的类 - 我想知道这是为什么。我不能有代表在单独的类?

什么我错过这里?一些空指针?对象的LiveCycle?

有帮助吗?

解决方案

您Control1Delegate对象被创建后是越来越快销毁。如果你想,让他们活着的所有顶级笔尖的对象必须保留。请参阅资源编程指南:笔尖对象生命周期

文件的所有者可以具有这样的属性,以保留对象:

@property (nonatomic, retain) IBOutlet Control1Delegate *control1delegate;

记住释放对象时,它不再需要后。

其他提示

您可以把任何类委托方法,其中一个只为这一目的建造的。究其原因苹果(和其他程序员)通常不用于委托功能使得类特别是它变得过于复杂,难于共享数据。举例来说,在我的项目之一,我可以打一个窗口控制器子类来处理从窗口,窗口内的表视图,而且窗口的工具栏的委托方法。你需要操作和维护窗口的状态一切都在一个控制器类。现在想象一下,三个独立的类(加上可能是一个控制器类来管理他们)做同样的functions--这是一个很大的额外的工作没有真正的好处。

至于为什么它的崩溃,这听起来像你正在做内存管理的其他地方在您的应用程序错误。您可以使用调试器来跟踪正是它的来源。

感谢你们俩。不仅我现在知道该如何解决我的问题,也终于明白了对象是如何保留在笔尖制作过程。这是不够的,在IB创建的对象,如果它是一个新的实体,它必须连接到真正的伊娃在文件的所有者(用正确synthetised的getter / setter)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top