Подтвердить что ты не робот

Повторное использование представления в UIPickerView с iOS 7

РЕДАКТИРОВАТЬ 12-14-2015. Эта проблема снова часто сообщается на iOS 7, iOS 8, iOS 9.... Я думаю, что Apple больше не хочет этого контроля, и должна просто запретить нам использовать его вместо того, чтобы позволить такой большой ошибке

Я использую UIPickerView с пользовательскими представлениями, загруженными из Xib. Я использовал метод

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row 
    forComponent:(NSInteger)component reusingView:(UIView *)view

из UIPickerViewDelegate, чтобы повторно использовать мои представления.

С iOS 6 мой UIPickerview работает отлично, и мои взгляды повторно используются.

Так как iOS 7, reusingView всегда равен нулю, поэтому мне нужно загрузить NIB для каждой строки (у меня 250 строк). Мои взгляды делают некоторые обработки, поэтому он может занимать небольшую часть памяти, но x250 = большая утечка памяти.

Чтобы убедиться в этом, я сделал простой проект с UILabel:

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {

    UILabel *label = (UILabel *)view;
    if(view == nil) {
        label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 76)];
    }
    else {
        NSLog(@"*******************************************************");
    }
    NSLog(@"Current inndex : %i",row);
    label.text = [NSString stringWithFormat:@"TITRE %i", row];
    return label;
}

С iOS 6 мои взгляды правильно используются повторно:

2013-12-17 14: 27: 25.395 EssaiReusedViewPicker [261: 907] Current inndex: 220 2013-12-17 14: 27: 25.396 EssaiReusedViewPicker [261: 907] ************************************************** ***** 2013-12-17 14: 27: 25.397 EssaiReusedViewPicker [261: 907] Текущая inndex: 221 2013-12-17 14: 27: 25.404 EssaiReusedViewPicker [261: 907] ************************************************** ***** 2013-12-17 14: 27: 25.407 EssaiReusedViewPicker [261: 907] Текущая inndex: 222 2013-12-17 14: 27: 25.409 EssaiReusedViewPicker [261: 907] ************************************************** ***** 2013-12-17 14: 27: 25.410 EssaiReusedViewPicker [261: 907] Current inndex: 223 2013-12-17 14: 27: 25.411 EssaiReusedViewPicker [261: 907] ************************************************** ***** 2013-12-17 14: 27: 25.412 EssaiReusedViewPicker [261: 907] Текущая inndex: 224 2013-12-17 14: 27: 25.414 EssaiReusedViewPicker [261: 907] ************************************************** ***** 2013-12-17 14: 27: 25.415 EssaiReusedViewPicker [261: 907] Текущая inndex: 225 2013-12-17 14: 27: 25.420 EssaiReusedViewPicker [261: 907] ************************************************** ***** 2013-12-17 14: 27: 25.424 EssaiReusedViewPicker [261: 907] Текущая inndex: 227 2013-12-17 14: 27: 25.425 EssaiReusedViewPicker [261: 907]

Но с iOS 7 это совершенно новая история...:

2013-12-17 14:36:09.555 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.557 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.557 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.560 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.560 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.561 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.563 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.563 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.564 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.566 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.567 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.567 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.568 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.568 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.569 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.569 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:14.172 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.350 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.351 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:14.367 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:14.667 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:14.668 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.700 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.067 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.067 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:15.083 EssaiReusedViewPicker[7209:70b] Current inndex : 6
2013-12-17 14:36:15.367 EssaiReusedViewPicker[7209:70b] Current inndex : 6
2013-12-17 14:36:15.367 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.400 EssaiReusedViewPicker[7209:70b] Current inndex : 7
2013-12-17 14:36:16.416 EssaiReusedViewPicker[7209:70b] Current inndex : 7

Итак, что случилось? iOS или...?

4b9b3361

Ответ 1

Я сообщил о своей проблеме в Apple Technical Support. Они подтверждают ошибку:

Кажется, что существует разница между поведением в iOS 6 и 7.

Они просят меня сообщить об ошибке в инструменте bugreport. Теперь просто подождите, чтобы исправить:)