Задача C: Об извлечении elemnts из NSMutableArray - PullRequest
0 голосов
/ 15 апреля 2011

Я новичок в задаче C. Я пытался получить элементы, хранящиеся в массиве, но у меня были некоторые значения мусора. Я пытался получить два пути, но не смог мне помочь. Я читал, что в Objective C объекты хранятся в массиве. Есть ли способ извлечь элементы из этих объектов. Пожалуйста, помогите.

Метод 1:

    Budget* europeBudget=[Budget new];
    NSMutableArray *transactions=[[NSMutableArray alloc] initWithCapacity:10];
    [europeBudget createBudget:1000.00 withExchangeRate:1.2500];
    Transaction* aTransaction;
    aTransaction = [Transaction new];
    for(NSUInteger n=1;n<2;n++){
     [aTransaction createTransaction:n*100 ofType:cash];
            [transactions addObject:aTransaction];
    }
    NSUInteger n=1;
    while (n<3) {   
            [aTransaction createTransaction:n*100 ofType:credit];
            [transactions addObject:aTransaction];
            n++;
    }

    do{
            [aTransaction createTransaction:n*100 ofType:credit];
            [transactions addObject:aTransaction];
            n++;
    }while (n<=3);

    NSLog(@"\nThe Elements are:\n");
    int c;
    c=[transactions count];
    NSLog(@"\nThe Elements are:\n");
    for(int i=0;i<c;i++){
            NSLog(@"%@",[transactions objectAtIndex:i]);
    }

Выход:

The Elements are:
2011-04-15 10:59:30.515 BudObj.m[569:a0f] <Transaction: 0x10010c900>
2011-04-15 10:59:30.516 BudObj.m[569:a0f] <Transaction: 0x10010c900>
2011-04-15 10:59:30.516 BudObj.m[569:a0f] <Transaction: 0x10010c900>
2011-04-15 10:59:30.517 BudObj.m[569:a0f] <Transaction: 0x10010c900>

Метод 2:

    Budget* europeBudget=[Budget new];
    NSMutableArray *transactions=[[NSMutableArray alloc] initWithCapacity:10];
    [europeBudget createBudget:1000.00 withExchangeRate:1.2500];
    Transaction* aTransaction;
    aTransaction = [Transaction new];
    for(NSUInteger n=1;n<2;n++){
     [aTransaction createTransaction:n*100 ofType:cash];
            [transactions addObject:aTransaction];
    }
    NSUInteger n=1;
    while (n<3) {   
            [aTransaction createTransaction:n*100 ofType:credit];
            [transactions addObject:aTransaction];
            n++;
    }

    do{
            [aTransaction createTransaction:n*100 ofType:credit];
            [transactions addObject:aTransaction];
            n++;
    }while (n<=3);

    NSLog(@"\nThe Elements are:\n");
    for(Transaction* aaTransaction in transactions){
            NSLog(@"%@",transactions);
    }

Выход:

The Elements are:
2011-04-15 11:01:30.090 BudObj.m[609:a0f] (
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>"
)
2011-04-15 11:01:30.090 BudObj.m[609:a0f] (
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>"
)
2011-04-15 11:01:30.091 BudObj.m[609:a0f] (
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>"
)
2011-04-15 11:01:30.092 BudObj.m[609:a0f] (
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>",
"<Transaction: 0x10010c900>"
)

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Вы получаете объект правильно, ваша проблема с его сохранением. Вы создаете только один объект транзакции. Внутри ваших циклов вы устанавливаете значение для одного и того же объекта на каждой итерации. Таким образом, вы получите несколько записей в массиве этого одного объекта, в котором хранится последнее значение каждого цикла. Вам нужно создать объект Transaction внутри цикла и добавить этот новый в массив, если вы хотите хранить отдельные значения.

Кроме того, только FYI, ваши циклы for и do-while будут оцениваться только один раз. Цикл for, поскольку вы начинаете с n = 1 и работаете только при N <2. Do-while вы не сбрасываете n после цикла while. Таким образом, он начинается с n = 3 и, следовательно, оценивается один раз, прежде чем n> 3.

0 голосов
/ 15 апреля 2011

кажется, вы не удовлетворены по умолчанию способом строкового представления объектов транзакции.В этом случае вы должны определить свой собственный метод

- (NSString *)description

, который будет представлять данные транзакции, которую вы хотите.Все остальные ваши коды кажутся правильными

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