【问题标题】:Objective C accessing an object method dynamically in an ArrayObjective C 在数组中动态访问对象方法
【发布时间】:2011-12-11 23:35:39
【问题描述】:

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

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

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

NSUInteger itemCount = [stockHolding count];

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

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

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

“NSString 可能无法响应 valueInDollars”

如有任何帮助,我们将不胜感激。

【问题讨论】:

  • 听起来你有一个字符串数组而不是 StockHolding 对象数组
  • 我很乐意为此提供帮助,但我有几个问题。班级名称是什么?数组的名称是什么?你想用这个循环来完成什么? NSString 的目的是什么? APPL 在代码中代表什么?谢谢。
  • 如果您在NSString *itemd = [stockHolding objectAtIndex:i]; 之后添加NSLog(@"%@", itemd);,您能否发布输出。

标签: objective-c


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    首先: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。你应该使用复数形式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-13
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多