-1

シングルトンクラスを使用して、ビュー間でNSMutableArrayを転送しています。

私が抱えている問題は、配列が複数回表示されることです。

現在、3つのUITextFieldを使用しています。それぞれが配列に追加され、特定の形式で出力されます。私の出力は次のようになります。

A / B

C

A / B

C

A / B

C

表示する必要があるのは次のとおりです。

A / B

C

誰かが不足しているものややり直しが必要なものを見つけるのを手伝ってくれる場合の私のコードは次のとおりです。

テキストを表示するには:

    UILabel * myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 200)];
    [myLabel setFont:[UIFont fontWithName:@"Helvetica" size:10.0]];
    myLabel.numberOfLines = 0;

    NSMutableString * string = [NSMutableString string];

    Education * myEducation = [Education sharedEducation];

    for (Education * output in myEducation.educationOutputArray)
    {
        [string appendString:[NSString stringWithFormat:@"%@ / %@ \n%@\n", [myEducation.educationOutputArray objectAtIndex:0], [myEducation.educationOutputArray objectAtIndex:1], [myEducation.educationOutputArray objectAtIndex:2], nil]];

    }

    myLabel.text = string;

    [self.view addSubview:myLabel];

これが私がテキストを保存しているところです:

 -(void)saveButtonTapped:(id)sender
 {
     [_educationArray addObject:_aTextField.text];
     [_educationArray addObject:_bTextField.text];
     [_educationArray addObject:_cTextField.text];

     Education * myEducation = [Education sharedEducation];
     myEducation.educationOutputArray = _educationArray;

     [self.navigationController popViewControllerAnimated:YES];
 }

編集 *

ユーザーがテキストフィールドにテキストを入力するときに、同じ3つのテキストフィールドを使用して新しいテキストセットを追加することもできます。

forループを削除すると、最初のループのみが表示されます。すべてのテキストを表示するにはどうすればよいですか?

2つ編集*

私はこれを試しました:

[string appendString:[NSString stringWithFormat:@"%@ / %@ \n%@\n", [output major], [output university], [output timeAtSchool]]];

このエラーが発生します:

2012-12-29 17:03:07.928 EasyTable[14501:c07] -[__NSCFString major]: unrecognized selector sent to instance 0x7176850
2012-12-29 17:03:07.941 EasyTable[14501:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString major]: unrecognized selector sent to instance 0x7176850'
*** First throw call stack:
(0x1c99012 0x10d6e7e 0x1d244bd 0x1c88bbc 0x1c8894e 0x6162 0xff817 0xff882 0xffb2a 0x116ef5 0x116fdb 0x117286 0x117381 0x117eab 0x1184a3 0x118098 0x2c10 0x10ea705 0x21920 0x218b8 0xe2671 0xe2bcf 0xe1d38 0x2e5213 0x1c61afe 0x1c61a3d 0x1c3f7c2 0x1c3ef44 0x1c3ee1b 0x1bf37e3 0x1bf3668 0x1e65c 0x240d 0x2335 0x1)
libc++abi.dylib: terminate called throwing an exception
4

3 に答える 3

0

配列に重複がありません:問題はforループにあります

for (Education * output in myEducation.educationOutputArray)
{
    [string appendString:[NSString stringWithFormat:@"%@ / %@ \n%@\n", [myEducation.educationOutputArray objectAtIndex:0], [myEducation.educationOutputArray objectAtIndex:1], [myEducation.educationOutputArray objectAtIndex:2], nil]];

}

ここでは、配列を3回ループして(配列には3つのオブジェクトがあるため)、毎回各オブジェクトを出力しています。私はあなたがただappendStringをするべきだと思います:forループなしの行

于 2012-12-29T22:43:07.760 に答える
0

あなたのforループは本当に奇妙です。配列内の各オブジェクトをループしますが、forループ内のインデックスをハードコーディングしました。そこで何が起こっているのかはわかりませんが、それは確かに奇妙な出力の原因です。オブジェクトへのそのポインタは、Educationアクセスする必要があるものです。ループを通過するたびに、の値を使用しますoutput

NSSet一意性の問題も発生している場合は、の代わりにを使用することを検討してNSMutableArrayください。注文が気になる場合は、を使用してNSOrderedSetください。セットコレクションタイプでは、値の重複は許可されません。

また、もう1つのポイント:インデックス0、1、および2の値にのみアクセスすることがわかっている場合は、。を使用しても意味がありませんNSArray。各値を個別に保存して、直接アクセスするだけです。少なくとも、forループの理由はありません。

編集:

Education配列にオブジェクトが含まれていると思われるが、実際にはプレーンな文字列が含まれているため、クラッシュしています。

-[__ NSCFString major]:認識されないセレクターがインスタンス0x7176850に送信されました

(そのアップルのプライベートサブクラスが内部で使用する)でメソッドmajorを呼び出そうとしたことに注意してください。これは、アレイに考えている内容が含まれていないことを示す良い指標です。3つのデータを使用してオブジェクトを作成することにより、データを配列に正しくロードしていることを確認してください。__NSCFStringNSStringEducation

あなたはまたあなたが試したことを提案しました

[string appendString:[NSString stringWithFormat:@ "%@ /%@ \ n%@ \ n"、出力]];

基本的にstringWithFormat:は、そのフォーマット文字列をテンプレートのように使用し、テンプレートのプレースホルダーを埋めるのに必要な数の引数を取ります。%@はオブジェクトの説明のプレースホルダーであるためstringWithFormat:、フォーマット文字列の後に3つのパラメーターがそれぞれを埋める必要があります%@

于 2012-12-29T22:43:37.917 に答える
0

一度に3つの要素を配列に追加し、後でそれらを一度に3つ処理する必要があります。

3つの要素を保持するコンテナークラスを作成し、コンテナークラスのインスタンスを配列に追加する方がおそらく良いでしょう。

しかし、本当にこのようにしたいのであれば、for/inループを使用することはできません。インデックス変数を使用する必要があります。

NSArray *array = myEducation.educationOutputArray;
for (NSUInteger i = 0, count = array.count; i < count; i += 3) {
    [string appendFormat:@"%@ / %@\n%@\n", array[i], array[i+1], array[i+2]];
}
于 2012-12-29T23:12:15.103 に答える