Ponowne wykorzystanie widoku w UIPickerView w systemie iOS 7

EDYTUJ 12-14-2015 : Ten problem jest ponownie często zgłaszany w systemie iOS 7, iOS 8, iOS 9 .... Myślę, że Apple nie chce już tego kontrolować i powinien po prostu zabronić nam korzystania z niego zamiast pozwolić takiemu poważnemu błędowi

Używam UIPickerView z niestandardowymi widokami załadowanymi z Xib. Używałem tej metody

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

z UIPickerViewDelegate, aby ponownie wykorzystać moje widoki.

W systemie iOS 6 mój widok UIPickerview działa idealnie, a moje widoki są ponownie wykorzystywane.

Od czasu iOS 7, reusingView jest zawsze zerowy, więc muszę załadować NIB dla każdego wiersza (mam 250 wierszy). Moje poglądy robią pewne zabiegi, więc może zająć trochę pamięci, ale x250 = duży wyciek pamięci.

Aby mieć pewność, na czym polega problem, zrobiłem prosty projekt za pomocą 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;
}

W systemie iOS 6 moje widoki są poprawnie używane ponownie:

2013-12-17 14: 27: 25.395 EssaiReusedViewPicker [261: 907] Aktualny indeks: 220 2013-12-17 14: 27: 25.396 EssaiReusedViewPicker [261: 907] ************** ***************************************** 2013-12-17 14:27: 25.397 EssaiReusedViewPicker [261: 907] Aktualny indeks: 221 2013-12-17 14: 27: 25.404 EssaiReusedViewPicker [261: 907] *********************** ******************************** 2013-12-17 14: 27: 25.407 EssaiReusedViewPicker [261: 907] Aktualny indeks : 222 2013-12-17 14: 27: 25.409 EssaiReusedViewPicker [261: 907] ******************************** *********************** 2013-12-17 14: 27: 25.410 EssaiReusedViewPicker [261: 907] Aktualny indeks: 223 2013-12-17 14: 27: 25.411 EssaiReusedViewPicker [261: 907] ***************************************** ************** 2013-12-17 14: 27: 25.412 EssaiReusedViewPicker [261: 907] Aktualny indeks: 224 2013-12-17 14: 27: 25.414 EssaiReusedViewPicker [261: 907] ************************************************** ***** 2013-12-17 14: 27: 25.415 EssaiReusedViewPicker [261: 907] Aktualny w ndex: 225 2013-12-17 14: 27: 25.420 EssaiReusedViewPicker [261: 907] ******************************* ************************ 2013-12-17 14: 27: 25.424 EssaiReusedViewPicker [261: 907] Aktualny indeks: 227 2013-12-17 14 : 27: 25.425 EssaiReusedViewPicker [261: 907]

Ale iOS 7 to zupełnie nowa historia ...:

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

Więc co się stało? iOS lub ...?

questionAnswers(1)

yourAnswerToTheQuestion