0

これを検索するために間違った語彙を使用しているかどうかはわかりませんが、私がやろうとしていることと関連していると思われるものを見つけることができません.

経費を入力するために作成したクラスがあります。Name、amount、および dueDate メンバー変数があります。コマンド ライン ツールを使用してこのクラスを作成し、テストしています。私の質問は、ユーザーが費用を追加する必要があるため、クラスからオブジェクトを作成する方法です。これは私がそれを機能させるために行ったことです。私はそれが気に入りません。

while ループはクラスの新しいインスタンスを作成し、ユーザー入力を取得し、expense クラスのメンバー変数を設定し、最後に後で使用するためにオブジェクトを配列に追加します。

すべてのオブジェクトが基本的に同じ名前を持っているのが好きではありません。ユーザーが入力した名前からオブジェクトの名前を作成したかったのですが、ユーザーにクラスの名前を入力させるのは良くないことがわかりました。ですから、何か提案をお願いします。そして、私はプログラミングにかなり慣れていないので、コードはおそらく非常にラフです.

    NSMutableArray *myExpenses = [[NSMutableArray alloc] init];

    while (enterMore == 1) 
    {
        Expense *anExpense = [[Expense alloc]init];

        NSLog(@"Enter an expense:\n\nName: ");
        scanf("%s", expenseName);
        billName = [NSString stringWithUTF8String: expenseName];
        anExpense.name = billName;

        NSLog(@"\nEnter the amount of the expense: ");
        scanf("%lf", &expenseAmount);
        anExpense.amount = expenseAmount;

        NSLog(@"\nEnter the day of the month the expense is due: ");
        scanf("%d", &dateDue);
        anExpense.dayOfMonthDue = dateDue;

        [myExpenses addObject:anExpense];

        NSLog(@"Enter 1 to enter more expenses anything else to quite: ");
        scanf("%d", &enterMore);

    }
for (int i = 0; i < [myExpenses count]; i++) 
{
    NSLog(@"%@", [[myExpenses objectAtIndex:i] name]);
    NSLog(@"%f", [[myExpenses objectAtIndex:i] amount]);
    NSLog(@"%d", [[myExpenses objectAtIndex:i] dayOfMonthDue]);
}
4

2 に答える 2

1

このためにできることは、キー (NSString) で各オブジェクトにアクセスできる辞書オブジェクト (NSMutableDictionary) にインスタンスを追加することです。これはこれを行う方法です。辞書の詳細については、次のリファレンスを参照してください。

http://www.techotopia.com/index.php/Objective-C_Dictionary_Objects

更新: コメントに答えるには、インスタンスを追加することを意味します。辞書オブジェクトは、数値の代わりにキーを使用してオブジェクトにアクセスする配列です。問題は、インスタンスを動的に作成できないことです。コンパイラはこれらの変数が存在するかどうかを認識せず、コンパイルしないため、アクセスすることは不可能です。これが許可されていない理由です。できることは、辞書オブジェクトを使用することです。ユーザーが経費名を入力すると、入力が文字列になるという事実のおかげで、経費名がより自動的に検出されるため、アクセスしやすくなります。

于 2012-06-25T00:38:43.563 に答える