Ваша главная проблема - вы используете один и тот же объект транзакции.Вы устанавливаете aTransaction один раз в этой строке и никогда не устанавливаете его где-либо еще.Я вижу из ваших комментариев, что когда-то это было правильно.
Transaction* aTransaction;
aTransaction = [Transaction new];
Когда вы добавляете транзакцию в массив, все они указывают на один и тот же объект, и то, что вы когда-либо вносили в то, что вы думаете, это1 aTransaction действительно меняет их всех.Поэтому, когда приходит время печатать, у вас есть несколько ссылок на одну и ту же транзакцию, все типа кредита, и вы продолжаете посылать одну и ту же сумму возврата.
Также помните, что индексы обычно основаны на 0, и int n = 1;
может не дать вамправильные числовые элементы, которые вы ищете.
Чтобы получить ожидаемый результат с максимально близким к вашему оригинальному коду, как я могу попробовать это.(возможно, потребуется некоторая настройка)
#import <Foundation/Foundation.h>
#import "BudObj.h"
#import "Transaction.h"
int main(int argc, char *argv[]) {
Budget* europeBudget=[[Budget alloc] init];
[europeBudget createBudget:1000.00 withExchangeRate:1.2500];
Transaction* aTransaction;
for(int n=1;n<2;n++){
aTransaction = [[Transaction alloc] init];
[aTransaction createTransaction:n*100 ofType:cash];
[transactions addObject:aTransaction];
[aTransaction release];
}
int n=0;
while (n<3) {
aTransaction = [[Transaction alloc] init];
[aTransaction createTransaction:n*100 ofType:credit];
[transactions addObject:aTransaction];
[aTransaction release];
n++;
}
//n = 3 at this point
do{
aTransaction = [[Transaction alloc] init];
[aTransaction createTransaction:n*100 ofType:cash];
[transactions addObject:aTransaction];
[aTransaction release];
n++;
}while (n<=3);
//n = 4 at this point
aTransaction = [[Transaction alloc] init];
[aTransaction createTransaction:n*100 ofType:credit];
[transactions addObject:aTransaction];
[aTransaction release];
for(Transaction *aaTransaction in transactions){
switch ([aTransaction returnType]) {
case cash:
[europeBudget spendDollars:[aaTransaction returnAmount]];
break;
case credit:
[europeBudget changeForeignCurrency:[aaTransaction returnAmount]];
break;
default:
break;
}
}
[transactions release];
[europeBudget release];
return 0;
}
Теперь я не проверял, правильны ли суммы в долларах, но это должно вывести правильный порядок конвертации / зарядки.Я также не предполагал, что была сборка мусора, поэтому я просто добавил все релизы.