再次显示视图后插座不工作"old"



我的情节提要中有几个UIViews,当然,我可以使用segue在它们之间切换。最初这工作得很好: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 是它应该的样子,所以错误一定是在将其写入文本字段中,因此我想这是一个出口问题......

无法保证您的奥特莱斯收藏的顺序。它的处理方式非常像NSDictionary,而不是NSArray - 在NSArray中,秩序是有保证的。迭代这种集合将为不同的设备/人/月相产生不同的结果。

当我使用这样的集合时,我倾向于设置"标签",然后在 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;
    }
}];

你可以只输出 tf,由

NSLog(@"%@",tf);

检查 tf 是否为空

好的,我找到了。我忘了发布一些东西,所以我的 UITextFields 确实在数组排序之前被设置了。我的错误!

最新更新