Objective C получает доступ к объектному методу динамически в массиве - PullRequest
0 голосов
/ 12 декабря 2011

Цель C: У меня есть NSMutableArray с 3 объектами класса stockHolding

класс имеет метод valueInDollars, который возвращает произведение (numberSfShares * shareMktVlue)

Цикл for (ниже) пытается динамически вызывать метод 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»

Любая помощь здесь будет оценена.

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Ваш пример кода, кажется, указывает, что ваш NSMutableArray называется stockHolding, тогда как текст вашего вопроса указывает, что stockHolding является классом объектов в массиве.Если мы предположим, что имя массива правильное и объекты в нем относятся к классу StockHolding, то должно работать следующее (с использованием быстрого перечисления Objective C 2.0):

for (StockHolding *stock in stockHolding) {
    float mktValue = [stock valueInDollars];
    // ...
}
0 голосов
/ 12 декабря 2011

Первое: ответ 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.Вы должны использовать множественное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...