Objective C在Array中动态访问对象方法

时间:2011-12-11 23:35:39

标签: objective-c

目标C: 我有一个带有3个类stockHolding对象的NSMutableArray

该类有一个方法valueInDollars,它返回的乘积 (numberOfShares * shareMktVlue)

for循环(下面)尝试动态调用Array中每个元素的方法valueInDollars,如下所示:

NSUInteger itemCount = [stockHolding count];

for (int i = 0; i < itemCount; i++) {
    NSString *itemd = [stockHolding objectAtIndex:i];
    float mktValue = [AAPL valueInDollars];  
}

问题是:如何动态声明AAPL,以便它在每次循环迭代时更改为数组中的股票代码对象。

我尝试在上面的代码中用“itemd”替换AAPL,但收到错误消息:

“NSString可能无法响应valueInDollars”

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您的代码示例似乎表明您的NSMutableArray被称为stockHolding,而您的问题文本表明stockHolding是数组中对象的类。如果我们假设数组名称是正确的并且其中的对象是类StockHolding,则以下内容应该有效(使用Objective-C 2.0快速枚举):

for (StockHolding *stock in stockHolding) {
    float mktValue = [stock valueInDollars];
    // ...
}

答案 1 :(得分:0)

首先:sjs的回答是正确的,我总是更喜欢这个解决方案。

另一种解决方案是:

NSUInteger itemCount = [stockHolding count];

for (int i = 0; i < itemCount; i++) {
    id itemd = [stockHolding objectAtIndex:i];
    float mktValue = [AAPL valueInDollars];  
}

或:

NSUInteger itemCount = [stockHolding count];

for (int i = 0; i < itemCount; i++) {
    StockHolding *itemd = [stockHolding objectAtIndex:i];
    float mktValue = [AAPL valueInDollars];  
}

注意:
你应该调用你的数组stockHoldings而不是stockHolding。你应该使用复数。