gpt4 book ai didi

objective-c - 如何根据 NSArray 的元素选择方法 (Objective-C)

转载 作者:行者123 更新时间:2023-11-29 05:01:13 25 4
gpt4 key购买 nike

我正在编写一种计算器应用程序。我有一个 UIPickerView (1 列)从 NSArray 字符串加载数据。用户将选择其中之一(它选择使用哪种类型的计算器——每种计算器使用不同的方法来计算)。用户在一些 UITextField 中输入一些内容,然后按 UIButton 进行计算。

我的 NSArray 是这样的:

calcNames = [NSArray alloc] initWithObjects:@"first", @"second", @"third", nil];

我的方法被称为firstCalc(input1, input2, input3), secondaryCalc(input1, input2, input3),等等。 (输入来自 UITextFields。)

当我按下按钮时,我想告诉它查看 UIPickerView 中的选择是什么并运行相应的方法,而不必为每个方法键入 if-then 语句(由于某些原因这样做非常不方便)具体到我的应用程序,这超出了本讨论的范围)。

所以我已经定义了一种方法来确定所选计算是什么:

selectedCalc = [[NSString alloc] initWithString:[calcNames objectAtIndex:row]]

其中“row”是 UIPickerView 中的当前选择。

现在我有一个 doCalculations 方法,用于当有人按下 UIButton 时:

-(IBAction)doCalculations:(id)sender  {

// save the data input
double input1 = [input1Field.text doubleValue];
double input2 = [input2Field.text doubleValue];
double input3 = [input3Field.text doubleValue];

// do the calculations
int i;
for (i = 0; i < [calcNames count]; i++) {
if (selectedCalc == [calcNames objectAtIndex:i]) {
// do calculations here
double numResult = ??????
// if selectedCalc is "first", I want it to do firstCalc(input 1, input 2, input 3)
// if selectedCalc is "second", I want it to do secondCalc(input 1, input 2, input 3), and so on

// the rest is just for displaying the result
NSString* result = [NSString stringWithFormat:@"The answer is %f", numResult];
[resultLabel setText:result];
}
}
}

所以基本上,它运行一个 for 循环,直到找到从 UIPickerView 中选择的计算器,当找到它时,运行计算并显示它们。

我一直在尝试了解函数指针或选择器(NSSelectorFromString?)是否适合在这里使用以及如何使用它们,但在阅读了几天后我真的很难理解该去哪里Apple 的文档、Stack Overflow 问题、使用示例代码以及修改我自己的代码。

抱歉,如果问题太长,我认为对于将来寻求帮助的其他人来说,查看完整的想法可能会更有帮助。 (至少我知道有时我会迷失在这些问题页面中。)

如果您能提供任何帮助,我将不胜感激,

瑞恩

最佳答案

您可以使用选择器动态调用方法。例如,您可以有一个 calcNames 的辅助数组,其中选择器名为 calcSelectors:

SEL calcSelectors[] = (SEL[3]){ 
@selector(first:arg:),
@selector(second:arg:),
@selector(third:arg:)};

调用正确的方法将非常简单:

[self performSelector:calcSelectors[calcIndex] withObject:arg1 withObject:arg2];

如果您需要超过 2 个参数,那么您还需要稍微修改一下 NSInitation 实例来设置调用。

关于objective-c - 如何根据 NSArray 的元素选择方法 (Objective-C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6897094/

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