gpt4 book ai didi

objective-c - 如何正确地从方法返回值并使其在应用程序加载后立即可用?

转载 作者:行者123 更新时间:2023-12-03 17:17:10 24 4
gpt4 key购买 nike

这里是第一篇文章,很抱歉它的长度。到目前为止,我已经潜伏并学习了很多东西,但现在我必须介入并提出问题。我按照常见问题解答中的建议阅读了这里的许多帖子,但我找不到我正在寻找的确切答案。

首先,我想说的是,我完全是编程初学者(更不用说 Objective-C),所以请原谅我对术语的任何误用。对于任何有趣的英语也是如此,因为英语不是我的母语。

我正在构建一个单位转换应用程序,其主窗口包含(以及其他内容)两个 popUpButton。我正在使用两个 popUpButton 中的 indexOfSelectedItem 来计算 float 值(我最初在 AwakeFromNib 以及稍后在弹出按钮 Controller 方法中(当用户更改选择时)。

我的问题由两部分组成:首先,计算该浮点的代码非常庞大,因为我正在比较所选项目的两个索引的每个组合。其次,我需要在启动后立即提供计算出的浮点值,因为用户可能希望在使用任何窗口 popUpButton 之前执行转换(否则我会将计算代码放在 -(IBAction) 方法)。

因此,我尝试使用以下代码来计算浮点值:

@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; 设置 popUpButton 等,但我真的不会不喜欢将所有浮点计算代码放入其中只是为了稍后在其他地方重复它。

所以第二个问题是:这是否可能是我想要实现的目标?另外,我需要将这个计算代码移到另一个类中吗?如果是这样,我怎样才能让其他类知道 popUpButton 中的indexOfSelectedItem?

很抱歉这篇冗长的文章以及可能令人困惑和愚蠢的问题。希望您在阅读时不必太咬牙切齿! :)

谢谢!

最佳答案

-(void)setCalculatedFloat:(float)calcFl {
calcFl = 1.0; // I'm simplifying, this is where I'd like to perform calculation
}

当您稍后打印它时,它不会显示,因为您分配给保存新值的变量,而不是属性值的变量。您需要分配给 calculatedFloat 实例变量。 (顺便说一句,您打错了该变量名称。)

您应该将计算转移到另一个方法中,并从 awakeFromNib 以及需要导致重新计算的任何地方向自己发送该消息。该方法应使用计算值调用 setCalculatedFloat:,即 setCalculatedFloat: 应该只是一个简单的 setter。进行更改后,您可以使用 @synthesize 语句替换自定义访问器,并让编译器为您编写访问器。

My problem consists of two parts: first, the code for calculation of that float is pretty massive as I'm comparing every combination of the two indexes of selected items.

您可能会看到是否可以创建自定义对象来设置为菜单项的 representedObject 属性,以便剪掉这个庞大的比较树。如果不知道比较树的用途,就很难对此进行更具体的说明。

关于objective-c - 如何正确地从方法返回值并使其在应用程序加载后立即可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3486782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com