Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用void方法设置字符串值_Objective C_Cocoa - Fatal编程技术网

Objective c 使用void方法设置字符串值

Objective c 使用void方法设置字符串值,objective-c,cocoa,Objective C,Cocoa,我有一个按钮(iAction),当我单击该按钮时,标签将更改(setStringValue)。 工作完美 是否有一种方法可以使用(void)方法更改标签(setStringValue),从而使该方法不是iAction。因为如果我调用这个方法,什么都不会发生?代码如下所示 //IBAction method, label is changed to setLabelMethod, works perfect. -(IBAction)setLabel:(id)sender{ [labelA s

我有一个按钮(
iAction
),当我单击该按钮时,标签将更改(
setStringValue
)。 工作完美

是否有一种方法可以使用(
void
)方法更改标签(
setStringValue
),从而使该方法不是
iAction
。因为如果我调用这个方法,什么都不会发生?代码如下所示

//IBAction method, label is changed to setLabelMethod, works perfect.

-(IBAction)setLabel:(id)sender{
  [labelA setStringValue:@"Works!"];
  ClassName *MyClass = [[ClassName alloc]init];
  [MyClass methodSetLabel]
}

//void method, nothing happens
-(void)methodSetLabel{
  [labelB setStringValue:@"Works!"];
}
我该怎么做才能让这一切顺利进行?
谢谢

iAction
方法是
void
。没有发生任何事情的原因与您所想的不同:这不是因为该方法是
void
,而是因为您调用该方法的实例是错误的

您的
setLabel
方法创建了
MyClass
的新实例。屏幕上显示的不是真正的
labelB

您需要在拥有标签并运行
setLabel:
方法的同一对象上调用该方法。在目标C中,该对象由一个名为
self
的特殊变量表示。如果您按照以下方式重写该方法

-(IBAction)setLabel:(id)sender{
    [labelA setStringValue:@"Works!"];
    [self methodSetLabel];
}

它应该能用。

谢谢,它能用!但是如何从另一个类调用相同的methodSetLabel。我有一个myView课程。在这个类(myView)中,我有一个键盘事件方法。因此,如果按下一个键,则必须调用methodSetLabel方法,并且必须更改标签。我试过这个:[self-methodSetLabel];但我得到了一个错误:“MyView的No visible@interface声明了选择器setStringValue。@Pidaji若要更改另一个类的标签,该另一个类的对象必须访问包含需要更改的标签的对象。该实例可以在初始化时传入,也可以通过某个已知位置获取(例如单身人士)。再次感谢!请原谅我的知识不足。我对objective-c/cocoa很陌生。你能告诉我如何通过初始化传递实例吗?@Pidaji我宁愿避免在评论中进行长时间的讨论。这将是一个不同的问题,你应该单独问。这将让你从能够如果你能理解你原来的问题的答案,请考虑通过点击复选标记来接受答案。