如何更改以下代码以修复被折旧的pickerView?
此代码之前运作良好并完成了工作。我不需要编译一段时间,当我修复另一个问题时,我遇到了这个NSRangeException,当它到达子视图时。用于处理以前版本的IOS的代码。任何想法将不胜感激。
由于未捕获的异常终止应用' NSRangeException',原因: ' - [__ NSArrayM objectAtIndex:]:索引1超出界限[0 .. 0]'
首先抛出调用堆栈:...等等
经过更多阅读后,我发现pickerView已被折旧。
永远不会理解为什么Apple可以改变代码!
-(void)willPresentActionSheet:(UIActionSheet *)actionSheet {
switch ([actionSheet tag] ) {
case 1://date
{
NSDate *d;
UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 50, 100, 116)];
[pickerView setTag:100+[actionSheet tag]];
[pickerView setDatePickerMode:UIDatePickerModeDate];
if( DefDate == @"" || DefDate == Nil ) DefDate = [fun0 GetCurrentDate];
d = [fun0 GetDatefromString:DefDate];
[pickerView setDate:d animated:YES];
[actionSheet addSubview:pickerView];
[pickerView release];
NSArray *subViews = [actionSheet subviews];
**// Line below is where is where it dumps:**
[[subViews objectAtIndex: SelectButtonIndex] setFrame:CGRectMake(20, 266, 280, 46)];
[[subViews objectAtIndex:CancelButtonIndex] setFrame:CGRectMake(20, 317, 280, 46)];
}
break;
}
}
- (IBAction)btnDate:(id)sender {
UIActionSheet *asheet = [[UIActionSheet alloc]
initWithTitle:@"Pick the date of your meal"
delegate:self
cancelButtonTitle:@""
destructiveButtonTitle:nil
otherButtonTitles:@"Select"
, nil];
[asheet setTag:1];
[asheet showInView:[self.view superview]];
[asheet setFrame:CGRectMake(0, 117, 320, 383)];
[asheet release];
}
答案 0 :(得分:1)
我已经使用iOS 8.0(以及在XCode6.1上运行)及以上版本对其进行了测试,您的代码和UIActionSheet
看起来都很不错。
它可以编译,运行并向我显示输出。
这是我得到的。
<强>更新强>
从iOS 8.0及更高版本开始,UIActionSheet
已弃用。它也停止支持添加子视图。这意味着iOS 8.0及更高版本的设备不会向您显示UIDatePicker
作为其子视图。如果通知,噩梦不是您在评论下方指定的错误行,但它不再显示数据选择器内部操作表。
来自文档,
UIActionSheet不是设计为子类,也不应该添加 查看其层次结构。如果您需要提供更多的表格 自定义比UIActionSheet API提供的,您可以创建 你自己并以模态呈现它 presentViewController:动画:完成:
恕我直言,
您应该升级您的应用和代码,以便仅从iOS 8.0开始支持。 UIActionSheet
将替换为UIAlertController
。 [<强>建议强>
如果您希望支持iOS 8,那么您可以使用第三方操作表,您可以在所有iOS版本中使用UIActionSheet
代替UIActionSheet
。这是https://github.com/skywinder/ActionSheetPicker-3.0 [好的选择]
如果您不想使用第三方并且仍想支持所有iOS版本,那么您可以运行时检查iOS版本,并根据您可以显示UIAlertController
和{ {1}}。 [不推荐]
可能对您有所帮助的链接很少。
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAlertController_class/
http://nshipster.com/uialertcontroller/
Add UIPickerView in UIActionSheet from IOS 8 not working
Showing a UIPickerView with UIActionSheet in iOS8 not working
答案 1 :(得分:0)
行动表Picker工作得很好,因为我能够直接与开发人员聊天才能开始。我想我花了一点时间来理解它,因为我每天都不在IOS中编程,但是一旦我做了它真棒!感谢上面的Hemang提出的所有建议!