-1

这是关于目标c和可可的

我遇到了一个问题,不知道如何解决。希望我能在这里找到答案,这对其他一些程序员会有帮助。

所以,我有一个包含 4 个元素的简单窗口:

  1. NSTextField - 设置值的第一个字段
  2. NSButton - 在第一个字段中设置值
  3. NSTextField - 设置值的第二个字段
  4. NSButton - 在第二个字段中设置值

这是“控制器1”代码:

#import "controller2.h"

@interface controller1 : NSControl{
IBOutlet NSTextField * text1;
}
-(IBAction)click:(id)sender;
@end

@implementation controller1
-(IBAction)click:(id)sender
{
[text1 setStringValue:@"text1 changed"];

// create controller 2 instance
controller2 * c2 = [[[controller2 alloc] init] autorelease];
// call first time using one way
[c2 click:self];

// call second time using another way
[self sendAction:@selector(click:) to:c2];
}
@end

和控制器 2 代码:

@interface controller2 : NSControl{
IBOutlet NSTextField * text2;
}
-(IBAction)click:(id)sender;

@end

@implementation controller2
-(IBAction)click:(id)sender
{
[text2 setStringValue:@"text 2 changed"];
NSLog(@"Test2");
}
@end

当我点击button1时,我在controller1中发出“点击”-一切都很好并且工作正常

当我单击按钮 2 时,我在控制器 2 中发出“单击”-一切都很好并且工作正常

但是,如果我想单击按钮 1 并在控制器 2 中单击“单击”,则它不起作用(

任何人都可以帮忙吗?它似乎有一个非常简单的解决方案,但我不知道我做错了什么。

4

1 回答 1

0
controller2 * c2 = [[[controller2 alloc] init] autorelease];

您正在创建一个全新的“controller2”(顺便说一下,一个类的坏名 - 始终将类名大写:“MyController”等)。您需要从 Controller1 到 Controller2 的 IBOutlet。这样您就可以按名称向它发送消息。

请记住:nib 中的对象是类的“冻干”实例

于 2011-10-05T18:42:52.303 回答