从Objective-C中的另一个类调用类方法(Cocoa)

时间:2011-12-02 21:35:30

标签: objective-c macos cocoa

我是Cocoa编程的新手,所以我仍然在努力掌握一些基本概念。

我想要做的(作为示例)是编写具有多个NSTextFields的应用程序。但是,这些NSTextFields 需要才能链接到不同的类。此外,每个单独的类都需要能够相互获取和设置数据。

我试图添加方法来解决这个问题,但无济于事。假设这是文本框原始类中的一种方法,我想从另一个类中调用它。

-(void)settextfield:(NSString*)stringy;
{
    [TextField setStringValue:stringy];
}   

这是调用代码(我们从另一个类TestClass调用它)...

-(IBAction)test:sender;
{
 [BundleBrowseTextBox settextfield: @"Testy"];
}

什么都没发生。可能有一些明显的方法可以做到这一点,但我无法通过谷歌搜索发现这一点。

4 个答案:

答案 0 :(得分:1)

我的错误是我正在调用类方法而不是实例...您可以通过IBOutlets调用实例并在Interface Builder中正确定义这些插件。

答案 1 :(得分:0)

如果我正确地假设您正在尝试在BundleBrowseTextBox的实例中设置文本,则应该在实例名称上调用settextfield:消息,而不是在类名称上调用(如果BundleBrowseTextBox是实例 - 而不是类 - 为了清楚起见,你应该真的避免使用大写的实例名称。即:

-(IBAction)test:(id)sender;
{
   // Assuming bbtBox is defined as an instance of BundleBrowseTextBox
   [bbtBox settextfield: @"Testy"];
}

答案 2 :(得分:0)

您需要确保您使用的指针不是零。

关于objC的一个奇怪/方便的事情是你可以将消息传递给nil并且它不会崩溃。

答案 3 :(得分:0)

我相信您在原帖中忘记了参数类型 此...

      -(IBAction)test:sender;
      {
        [BundleBrowseTextBox settextfield: @"Testy"];
      }

应该是

   -(IBAction)test:(id)sender;
   {
      [BundleBrowseTextBox settextfield: @"Testy"];
   }

除此之外,如果你理解你所说的类和实例之间的区别。 如果您向我们展示其余的实现和界面,那将是很好的。 问题可能不在您向我们展示的代码段中。