Xcode를 (를) 처음 사용했습니다. 이제 내 응용 프로그램에서 2 열을 UIPickerView
구현하고 싶습니다. 첫 번째 열은 숫자 (예 : 1-5)이고 두 번째 열은 단위 (예 : 일, 주)입니다 (예 : 1 일, 2 일, 3 주). 여러 구성 요소가있는 UIPickerView
- (void)viewDidLoad
{
repeatLabel.text = @"Never ever";
repeatNoArray= [[NSMutableArray alloc]init];
[repeatNoArray addObject:@"Never"];
for (int i = 1; i<=5; i++)
{
[repeatNoArray addObject:[NSString stringWithFormat:@"%i",i]];
}
timeUnitArray = [[NSMutableArray alloc]initWithObjects:@"ever",nil];
timeUnit1Array = [[NSMutableArray alloc]initWithObjects:@"day",@"week",@"month",@"year",nil];
timeUnit2Array = [[NSMutableArray alloc]initWithObjects:@"days",@"weeks",@"months",@"years",nil];
repeatPicker.delegate = self;
repeatPicker.dataSource = self;
[super viewDidLoad];
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
if (pickerView == repeatPicker && component == 0)
return [repeatNoArray count];
else if (pickerView == repeatPicker && component == 1)
{
if ([repeatPicker selectedRowInComponent:0] == 0)
return timeUnitArray.count;
else if ([repeatPicker selectedRowInComponent:0] == 1)
return timeUnit1Array.count;
else
return timeUnit2Array.count;
}
return nil;
};
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (pickerView == repeatPicker && component==0)
return [repeatNoArray objectAtIndex:row];
if (pickerView == repeatPicker && component==1)
{
if ([repeatPicker selectedRowInComponent:0] == 0)
return [timeUnitArray objectAtIndex:row];
else if ([repeatPicker selectedRowInComponent:0] == 1)
return [timeUnit1Array objectAtIndex:row];
else
return [timeUnit2Array objectAtIndex:row];
}
return nil;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
if (pickerView == repeatPicker)
{
NSInteger selectedIndex = [repeatPicker selectedRowInComponent:0];
if (component == 0 && !(selectedIndex < 0))
{
[repeatPicker reloadComponent:1];
[repeatPicker selectRow:0 inComponent:1 animated:YES];
}
else
{
// do nth
}
[repeatPicker reloadComponent:1];
NSString *RepeatValue = [repeatNoArray objectAtIndex:[repeatPicker selectedRowInComponent:0]];
NSString *RepeatPeriod = [timeUnitArray objectAtIndex:[repeatPicker selectedRowInComponent:1]];
repeatLabel.text = [[@"Every " stringByAppendingString:RepeatValue]stringByAppendingString: RepeatPeriod];
}
}
을,하지만 두 번째 열에서 새로운 값을 선택하려고 할 때, 그것은 나에게 오류 제공 :
을Terminating app due to uncaught exception 'NSRangeException', reason: '* -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]' * First throw call stack: (0x31195f4b 0x3b5d66af 0x310cc533 0x102e71 0x33b7c329 0x33b7f119 0x33e4f223 0x33a3aa5b 0x33b08407 0x33b04021 0x33b03adb 0x33adbab3 0x33e4edbf 0x33b7e0bf 0x3391a6e5 0x33b7dfed 0x33b7e401 0x339fe5b9 0x33921f69 0x310da821 0x310da72f 0x33912f0d 0x339ff225 0x33909011 0x33908da3 0x3358fc6b 0x3358b47b 0x3358b30d 0x3358ad1f 0x3358ab2f 0x3358485d 0x311611cd 0x3115eb71 0x3115eeb3 0x310c9c27 0x310c9a0b 0x35df0283 0x3396d049 0x103871 0x3badeab7) libc++abi.dylib: terminating with uncaught exception of type NSException
누구든지 코드를 어떻게 수정해야합니까?
, 당신은 "구성 요소"또는 "열"대신 "행"을 의미합니까? – Anna
오, 그래, 고마워. 나는 항상 그것을 섞는다. 그것은 열이어야합니다. – user3195152
didSelectRow에서는 'timeUnitArray objectAtIndex' 줄에서 충돌이 발생해야합니다. titleForRow의 코드를 기준으로 구성 요소 1에 사용할 배열은 구성 요소 0의 값을 기반으로해야합니다. – Anna