使用iOS 7重用UIPickerView中的视图

QLa*_*Lag 13 uipickerview ios ios7

编辑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
Run Code Online (Sandbox Code Playgroud)

从UIPickerViewDelegate重用我的视图.

使用iOS 6,我的UIPickerview完美运行,我的视图可以重复使用.

从iOS 7开始,reusingView总是为nil,所以我需要为每一行加载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;
}
Run Code Online (Sandbox Code Playgroud)

使用iOS 6,我的视图可以正确重用:

2013-12-17 14:27:25.395 EssaiReusedViewPicker [261:907]当前的指数:220 2013-12-17 14:27:25.396 EssaiReusedViewPicker [261:907]*******************************************************2013-12-17 14:27: 25.397 EssaiReusedViewPicker [261:907]当前的指数:221 2013-12-17 14:27:25.404 EssaiReusedViewPicker [261:907]*******************************************************2013-12-17 14:27:25.407 EssaiReusedViewPicker [261:907]当前的指数:222 2013-12-17 14:27:25.409 EssaiReusedViewPicker [261:907]*******************************************************2013-12-17 14:27:25.410 EssaiReusedViewPicker [261:907]当前的指数:223 2013-12-17 14: 27:25.411 EssaiReusedViewPicker [261:907]*******************************************************2013-12-17 14:27:25.412 EssaiReusedViewPicker [261:907]当前的索引:224 2013-12-17 14:27:25.414 EssaiReusedViewPicker [261:907]*******************************************************2013-12-17 14:27:25.415 EssaiReusedViewPicker [261:907]当前 ndex:225 2013-12-17 14:27:25.420 EssaiReusedViewPicker [261:907]*******************************************************2013-12-17 14:27:25.424 EssaiReusedViewPicker [261:907]当前的指数: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
Run Code Online (Sandbox Code Playgroud)

那有什么不对?iOS还是......?

QLa*_*Lag 8

我向Apple技术支持部门报告了我的问题.他们确认了这个错误:

iOS 6和7中的行为确实存在差异.

他们让我报告错误报告工具上的错误.现在,等待修复:)

  • 看来该错误仍然存​​在于iOS 9中.已提交雷达:https://openradar.appspot.com/radar?id = 5546826446929920 (3认同)
  • 我不同意这个错误是修复的.我没有看到在iOS 7或iOS 7.1或iOS 8中修复此错误的迹象.我将再次提交错误. (2认同)
  • 好吧,你可以在7,7.1或8上运行我的[示例](https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch12p568pickerView/ch25p842pickerView/ViewController.swift)我们将永远不会重复使用任何标签. (2认同)