1

ストーリーボードにはいくつかの UIView があり、もちろん、セグエを使用してそれらを切り替えることができます。最初はこれで問題なく動作します。notenKurse は NSMutableArray であり、kurse1Outlets は私の UITextFields を持つアウトレット コレクションです。

int counter = 0;
for (UITextField *tf in kurse1Outlets) {
    NSMutableString *t = [NSMutableString stringWithFormat:@"%@", [notenKurse objectAtIndex:counter]];
    NSLog(@"Object at index %i is %@", counter, [notenKurse objectAtIndex:counter]);
    if ([t isEqualToString:@"42"]) {
        [t setString:@""];
    }
    [tf setText:t];
    NSLog(@"UITextField in slot %i should now display %@", counter, t);
    counter++;
}

すべての UITextFields は、配列に格納されている値を表示しています。しかし、別のビューに移動すると (ボタンがあると仮定しましょう;)) 何かを変更してから元の UIView に戻りますが、上記のコードは引き続き実行され、配列には異なる値があります (これは、なれ)。私はログでそれを見ることができます。しかし、愚かな UITextField は何も表示しません。以前そこにあったものでも、新しいテキストでもありません。しかし、なぜ?ログは、 t が本来あるべきものであることを明確に示しているため、エラーはテキストフィールドへの書き込みにあるに違いないため、アウトレットの問題だと思います...

4

3 に答える 3

2

アウトレット コレクションの順序を保証するものではありません。これは、順序が保証されている NSArray とは対照的に、NSDictionary のように扱われます。この種のコレクションを反復すると、さまざまなデバイス/人/月の満ち欠けに対してさまざまな結果が得られます。

このようなコレクションを使用するときは、「タグ」を設定してから、viewDidLoad 時にタグを並べ替えてアウトレット コレクションを並べ替える傾向があります。

self.calendarDayImageViews = [_calendarDayImageViews sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    if ([(UIView *)obj1 tag] < [(UIView *)obj2 tag]) {
        return NSOrderedAscending;
    }
    else if([(UIView *)obj1 tag] > [(UIView *)obj2 tag]){
        return NSOrderedDescending;
    }
    else{
        return NSOrderedSame;
    }
}];
于 2012-06-19T19:49:11.277 に答える
1

あなたはただtfを出力することができます

NSLog(@ "%@"、tf);

tfがnullかどうかを確認するには

于 2012-06-16T11:20:52.190 に答える
0

わかりました、見つけました。いくつかのものを解放するのを忘れていたので、配列がソートされる前に UITextFields が設定されました。私のミス!

于 2012-06-19T20:08:16.613 に答える