使用iOS 7重用UIPickerView中的视图

使用iOS 7重用UIPickerView中的视图,ios,ios7,uipickerview,Ios,Ios7,Uipickerview,编辑12-14-2015:此问题在iOS 7、iOS 8、iOS 9上再次频繁出现。。。。我认为苹果不再需要这种控制,应该禁止我们使用它,而不是让这样一个大错误 我使用UIPickerView和从Xib加载的自定义视图。 我在用这个方法 -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIVi

编辑12-14-2015:此问题在iOS 7、iOS 8、iOS 9上再次频繁出现。。。。我认为苹果不再需要这种控制,应该禁止我们使用它,而不是让这样一个大错误

我使用UIPickerView和从Xib加载的自定义视图。 我在用这个方法

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row 
    forComponent:(NSInteger)component reusingView:(UIView *)view
从UIPickerViewDelegate重新使用我的视图

在iOS 6中,我的UIPickerview可以完美地工作,并且可以重用我的视图

由于iOS7,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]当前索引 :220 2013-12-17 14:27:25.396 EssaiReusedViewPicker[261:907] *******************************************************2013-12-17 14:27:25.397当前索引:221 2013-12-17 14:27:25.404 EssaiReusedViewPicker[261:907] *******************************************************2013-12-17 14:27:25.407当前索引:222 2013年12月17日14:27:25.409发电子邮件浏览者[261:907] *******************************************************2013-12-17 14:27:25.410当前索引:223 2013年12月17日14:27:25.411发电子邮件给浏览者[261:907] *******************************************************2013-12-17 14:27:25.412 EssaiReusedViewPicker[261:907]当前索引:224 2013年12月17日14:27:25.414发电子邮件给浏览者[261:907] *******************************************************2013-12-17 14:27:25.415 EssaiReusedViewPicker[261:907]当前索引:225 2013-12-17 14:27:25.420电子邮件下载者[261:907] *******************************************************2013-12-17 14:27:25.424当前索引: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或…?

我已向苹果技术支持部门报告了我的问题。他们确认了错误:

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


他们让我报告bugreport工具上的一个bug。现在,只需等待修复:)

“(我有250行)”,您是否将
UITableViewCell
UIPickerview
子视图一起使用?不,是简单的UIView。这不应该是一个问题,因为可以使用带有UILabel的重用视图。即使使用UILabel,它也不起作用如果您有行,为什么不对自定义单元格使用
UITableView
?因为我不想要tableView,而是UIPickerView。。。因为当我需要在列表中选择一个项目时,UIPickerView是合适的组件。哦,那么你想重用你在
UIPickerView
中使用的
UILabel
s,我不同意这个错误已经修复。我看不到任何迹象表明iOS 7或iOS 7.1或iOS 8中修复了此错误。我将再次提交错误。对@QLag,但这不是
tableView:cellforrowatinexpath:
。它根本不是一个表视图。这是
pickerView:viewForRow:forComponent:reusingView:
。运行my,您将看到没有标签被重用:事实上,当您上下滚动时,我们会创建成百上千个标签,即使picker视图只有五十行。您可以在7、7.1或8上运行my,你会发现我们从来没有重复使用过任何标签。看来这个错误仍然存在于iOS 9中。已提交雷达: