Objective c 如何正确地从方法返回值,并在应用程序加载后立即使其可用?
第一个帖子在这里,所以很抱歉它的长度。到目前为止,我一直在潜行,学到了很多东西,但现在我必须介入并提出一个问题。我已经阅读了很多常见问题解答中建议的帖子,但我找不到确切的答案 在此之前,我要说的是,我是编程的初学者(更不用说Objective-C了),所以请原谅我对术语的误用。任何有趣的英语都是一样的,因为英语不是我的母语 我正在构建一个单位转换应用程序,其中的主窗口包含两个Objective c 如何正确地从方法返回值,并在应用程序加载后立即使其可用?,objective-c,cocoa,Objective C,Cocoa,第一个帖子在这里,所以很抱歉它的长度。到目前为止,我一直在潜行,学到了很多东西,但现在我必须介入并提出一个问题。我已经阅读了很多常见问题解答中建议的帖子,但我找不到确切的答案 在此之前,我要说的是,我是编程的初学者(更不用说Objective-C了),所以请原谅我对术语的误用。任何有趣的英语都是一样的,因为英语不是我的母语 我正在构建一个单位转换应用程序,其中的主窗口包含两个popubButtons。我从两个popupubuttons中使用indexOfSelectedItem来计算float值
popubButton
s。我从两个popupubutton
s中使用indexOfSelectedItem
来计算float
值(我最初在AwakeFromNib
中获取索引,后来在用户更改选择时在弹出按钮控制器方法中获取索引)
我的问题由两部分组成:首先,当我比较所选项目的两个索引的每个组合时,计算该浮点值的代码非常庞大。其次,我需要在启动后立即获得计算出的浮点值,因为用户可能希望在使用任何窗口弹出按钮之前执行转换(否则,我会将计算代码放在-(iAction)
方法中)
因此,我尝试使用以下代码来计算浮点值:
@interface MyClass: NSObject
float calculatedFloat;
-(void)setCalculatedFloat:(float)calcFl;
-(float)calculatedFloat;
@implementation MyClass
-(void)setCalculatedFloat:(float)calcFl {
calcFl = 1.0; // I'm simplifying, this is where I'd like to perform calculation
}
-(float)calculatedFloat {
return calculatedFloat;
}
现在,对于问题的第一部分,当我在另一种方法中使用calculatedFloat时,说:
-(void)printIt {
NSLog(@"Calculated float equals: %.2f", calulatedFloat);
}
我在调试器中收到的全部是0.00
第一个问题是:如果这不起作用,如何从另一个方法中正确访问该值
对于问题的第二部分,我使用了-(void)AwakeFromNib
在启动后立即设置弹出按钮
s等,但我真的不想把所有的浮点计算代码都放进去,只是以后在其他地方重复
因此,第二个问题是:这可能是我想要实现的吗?此外,是否需要将此计算代码移动到另一个类?如果是这样,我如何使另一个类从popUpButton中知道indexOfSelectedItem
很抱歉,这篇文章很长,可能还有一些令人困惑和愚蠢的问题。我希望你在阅读的时候不必太咬牙切齿!:)
谢谢
这在以后打印时不会显示,因为您指定给了保存新值的变量,而不是属性值的变量。您需要为calulatedFloat
实例变量赋值。
(顺便说一句,你输入了那个变量名。)
您应该将计算转移到另一种方法中,并从awakeFromNib
和需要重新计算的任何地方向自己发送该消息。该方法应该使用计算值调用setCalculatedFloat:
,即setCalculatedFloat:
应该只是一个简单的setter。一旦进行了更改,就可以用@synthesis
语句替换自定义访问器,并让编译器为您编写访问器
我的问题由两部分组成:首先,当我比较所选项目的两个索引的每个组合时,计算该浮动的代码非常庞大
您可能会看到是否可以创建自定义对象,将其设置为菜单项“representedObject
properties”,以便剪切出这个庞大的比较树。在不知道比较树的功能的情况下,很难更具体地说明这一点
这在以后打印时不会显示,因为您指定给了保存新值的变量,而不是属性值的变量。您需要为calulatedFloat
实例变量赋值。
(顺便说一句,你输入了那个变量名。)
您应该将计算转移到另一种方法中,并从awakeFromNib
和需要重新计算的任何地方向自己发送该消息。该方法应该使用计算值调用setCalculatedFloat:
,即setCalculatedFloat:
应该只是一个简单的setter。一旦进行了更改,就可以用@synthesis
语句替换自定义访问器,并让编译器为您编写访问器
我的问题由两部分组成:首先,当我比较所选项目的两个索引的每个组合时,计算该浮动的代码非常庞大
您可能会看到是否可以创建自定义对象,将其设置为菜单项“representedObject
properties”,以便剪切出这个庞大的比较树。如果不知道比较树的作用,很难对这一点进行更具体的说明。非常感谢您的及时回复。我一直在试图找出“您应该将计算移到另一个方法(…)。该方法应该调用setCalculatedFloat:(…)”部分,但不幸的是,这正是我没有得到的部分。最终,我只能想到这些:@implementation MyClass-(void)setCalculatedFloat:(float)calcFl{calculatedFloat=calcFl;}-(float)calculatedFloat{return calculatedFloat;}-(float)calculateTheFloat{float abc=1.0;//[self-setCalculatedFloat:abc];}第三种方法的警告很明显。calculateTheFloat
不应该返回任何内容;它应该发送setCalculatedFloat:
消息,与您注释的内容完全相同。不幸的是,注释被乱码成一行。行[self-setCalculatedFloat:abc];
未注释,空注释位于前一行之后。使用[self-setCalculatedFloat:abc];
我得到警告:控件到达非无效函数的末尾
,NSLog
仍然返回cal
-(void)setCalculatedFloat:(float)calcFl {
calcFl = 1.0; // I'm simplifying, this is where I'd like to perform calculation
}