【问题标题】:Arbitrary objects to handle actions?处理动作的任意对象?
【发布时间】:2009-09-27 21:09:48
【问题描述】:

我的问题可能有点愚蠢,但是为什么在 IB 中实例化的任何对象都不能处理,比如按钮单击?我的意思是我可以将自己的对象添加到 xib,并将出口链接到控制和控制操作到对象的方法,但是一旦我按下按钮,一切都会崩溃(未知选择器)。

你们有什么暗示吗?

编辑:代码,按要求:

@interface TextController {
    IBOutlet UILabel * textLabel;
    IBOutlet UITextField * textField;
}

-(IBAction)buttonClicked:(id)sender;

@end

@implementation TextController

-(IBAction)buttonClicked:(id)sender {
    textLabel.text = @"Ololo";
}

@end

IB 中的连接还可以,相信我。所有这些拖放的东西真的很难让他们误会:)

编辑 2: TextController 不是文件所有者(在这种情况下它可以正常工作)。但是,我只是想了解为什么我不能将动作连接到某个对象(甚至可能不是 UIViewController 的子类)。

【问题讨论】:

    标签: iphone objective-c xcode xib


    【解决方案1】:

    您可以将插座和动作连接到 nib 文件中的任何对象。在 Interface Builder 中,将库调色板中的 NSObject 拖到您的 nib 文件中。然后转到信息面板的 Identity 选项卡并设置对象的 Class。

    通过这种方式,您可以从您的 nib 实例化任何类的任何对象。如果要挂钩的目标是从 nib 文件静态创建的。确保文件的所有者至少有一个对您的对象的引用,否则它将在创建后立即被释放。发送方不保留目标。

    如果您要连接的对象不应从您的 nib 静态创建,则在从 nib 文件实例化的类中实现 awakeFromNib 并在代码中连接目标。

    最后一个选项是,如果您在 nib 文件中根本没有您自己的任何子类。然后在您的UIViewController 子类中实现initWithNibName:bundle:,并在调用超级实现后将您的目标连接到代码中。

    【讨论】:

    • 啊,伙计,你救了我的大脑!谢谢你,真的。当 XIB 如何工作的整个形象在我面前毁掉时,我正要放弃编程。问题实际上与内存管理有关。废话,为什么我不知道这个?..
    【解决方案2】:

    邮政编码,这通常意味着您没有正确连接您的连接。文件的所有者 TextController 在 IB 中吗?

    【讨论】:

    • 不,他不是,我不希望它成为文件所有者。为什么我不能将一些动作映射到某个任意对象?附:映射到文件所有者很好,当然。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多