【问题标题】:Sending messages to objects created in Interface Builder向在 Interface Builder 中创建的对象发送消息
【发布时间】:2011-09-14 12:22:52
【问题描述】:

总的来说,我对 Cocoa、Objective-C 和 OOP 还是很陌生。我每天都在学习。根据 'Cocoa Programming for Mac OS X for DUMmIES' 你可以像这样在 Xcode 中创建一个对象:

myObject = [[Class_name alloc] init];

之后你就可以根据Class_name中声明的方法向它发送消息了。到目前为止,一切都很好。但是昨天我按照这个教程:Intro to Bindings 并注意到一些奇怪的东西。根据教程,您必须在 Interface Builder 中创建一个 NSArrayController 对象。但是,如果你想向数组中添加一行,由控制器管理,其值来自几个 NSTextField,你需要调用它的 AddObject 方法,但是如何调用呢?我不知道对象名称或标识符,对吧?

【问题讨论】:

    标签: objective-c cocoa object methods interface-builder


    【解决方案1】:

    只需创建一个插座

    IBOutlet NSArrayController *arrayController;
    

    并在 IB 中将您的 arrayController 连接到它; 调用它的方法使用[arrayController methodName];

    【讨论】:

    • 是的,我知道,但我想通过代码来实现。因为以这种方式(调用 Add: 方法)我在数组中得到了一个空行。我想用几个 TextField 的内容填充它,还是我遗漏了什么?
    • 如果我是对的,您绑定到数组控制器的集合视图(或其他东西)不会更新其内容。如果是这样,请阅读 KVO 指南 link
    • 嗯,不,这不是正在发生的事情。我需要在数组中添加一行。显然,这样做的方法是调用数组控制器的 addObject 方法。数组控制器自动更新 tableView。但是我如何从代码中调用这个方法呢?我可以在 Interface Builder 中做到这一点,但只添加了一个空行。我想使用一张表格,您可以在其中输入一些内容并将这些值用于新行。
    • 在控制器类的某些地方添加此方法:- (IBAction)addDataRow { [arrayController addObject:[NSDictionary dictionaryWithObjectsAndKeys:[textField1 stringValue],@"name",[textField2 stringValue],@"description", nil]]; [tableView reloadData]; } 将此操作连接到 IB 中的任何按钮。并检查您列的 Model Key Path 值。它们必须与字典中的键相同。
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多