我试图用UIPickerView控制我的UIWebView,以显示不同的PDF文件。但不知何故,我的代码没有。如果我选择某一行或显示错误的PDF,它会崩溃。有什么想法吗?
#import "PickerViewTutorialViewController.h"
@implementation PickerViewTutorialViewController
@synthesize pickerView;
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
[self populateArray1];
[self populateArray2];
}
- (void)populateArray1 {
array1 = [[NSMutableArray alloc] init];
[array1 addObject:@"1"];
[array1 addObject:@"2"];
[array1 addObject:@"3"];
[array1 addObject:@"4"];
[array1 addObject:@"5"];
[array1 addObject:@"6"];
}
- (void)populateArray2 {
array2 = [[NSMutableArray alloc] init];
[array2 addObject:@"A"];
[array2 addObject:@"B"];
[array2 addObject:@"C"];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark -
#pragma mark picker view methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
return 2;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if ([[array1 objectAtIndex:row] isEqual:@"1"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"2"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"3"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"4"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"5"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"6"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6C.pdf"]]]]; }
}
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
if (component == 0) {
return [array1 count];
}
else {
return [array2 count];
}
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
if (component == 0) {
return [array1 objectAtIndex:row];
}
else {
return [array2 objectAtIndex:row];
}
}
@end
答案 0 :(得分:0)
首先,由于您处理行选择的方式,您的代码崩溃了。 你的第二个对象数组(array2)只有3个对象(索引为0,1,2),但是如果你选择第一个组件中的第4个对象,你将尝试访问array2中索引3处的对象,这样你就会得到一个“出界”的例外。
我建议你用这种方法重写你的逻辑:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
您应该使用inComponent:(NSInteger)component
部分来优化代码
我希望这会有所帮助。
答案 1 :(得分:0)
请注意,您可以替换所有代码:
if ([[array1 objectAtIndex:row] isEqual:@"1"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"2"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"3"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"4"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"5"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5C.pdf"]]]]; }
}
if ([[array1 objectAtIndex:row] isEqual:@"6"]) {
if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6A.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6B.pdf"]]]]; }
if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6C.pdf"]]]]; }
}
人:
NSString *numberString = [array1 objectAtIndex:row];
NSString *letterString = [array2 objectAtIndex:row];
NSString *pathComponentString = [NSString stringWithFormat:@"Stundenplan_%@%@.pdf", numberString, letterString];
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:pathComponentString]]]];
在前两行(简化代码)中,您会看到问题:当行为3或更大时,您无法调用长度仅为3的[array2 objectAtIndex:row];
。
修改
您可以使用以下方法:
- (NSInteger)selectedRowInComponent:(NSInteger)component;
确定字母和数字的正确索引:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSString *numberString = [array1 objectAtIndex:[pickerView selectedRowInComponent:0]];
NSString *letterString = [array2 objectAtIndex:[pickerView selectedRowInComponent:1]];
NSString *pathComponentString = [NSString stringWithFormat:@"Stundenplan_%@%@.pdf", numberString, letterString];
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:pathComponentString]]]];
}