2009-10-26 4 views
1

선택 도구의 기본값을 설정하는 방법이 있습니까? 모든 선택기에서 마지막으로 선택한 행을 저장하고 시작할 때 저장된 행을 선택기로 가져올 수 있기를 원합니다. 현재로서는 다음 코드를 발견했습니다 :기본 선택 값 iphone

[settingsPagePicker selectRow:3 inComponent:0 animated:YES]; 

사용자가 피커를 두드렸을 때만 작동합니다. 앱을 처음로드 할 때 작동해야합니다. 이 코드를 viewDidLoad에두면 앱이 다운됩니다. 누구든지 내 코드에서이 코드를 작동시키기 위해 적절한 위치를 알 수 있습니까?

감사합니다.

답변

6

입니다 (샘플 코드에서 3)?

데이터 소스에 대한 데이터를 어떻게로드합니까? 먼저 viewDidLoad에서 데이터 소스를 초기화 한 다음 사용 가능한 데이터가 있음을 알게되면 selectRow를 호출 할 수 있습니다.

업데이트 : 여기에 코드를 같이해야하거나 같은 것입니다 : 나는 viewDidAppear 방법이 없었다

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    pickerDataSource = [[NSMutableArray alloc] init]; 
    [pickerDataSource addObject:@"Item 01"]; 
    [pickerDataSource addObject:@"Item 02"]; 
    [pickerDataSource addObject:@"Item 03"]; 
    [pickerDataSource addObject:@"Item 04"]; 

    // Might want to move this to -viewWillAppear:animated 
    [settingsPagePicker selectRow:3 inComponent:0 animated:YES]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if (pickerView == settingsPagePicker) 
    { 
     return [pickerDataSource objectAtIndex:row]; 
    } 
    return @""; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if (pickerView == settingsPagePicker) 
    { 
     return [pickerDataSource count]; 
    } 
    return 0; 
} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView 
{ 
    return 1; 
} 
+0

) 환영합니다 : 종단 응용 프로그램으로 인해 캐치되지 않는 예외 'NSRangeException'이유로 '*** - [NSCFArray objectAtIndex :] : 인덱스 (0) 경계 (0)를 넘어' 내가 초기화 할 필요가 내 데이터 소스 먼저,하지만 어떻게 피커를 사용하여 도청 밖으로 데이터 소스를 초기화 할 수 있습니까? – Jeff

+0

데이터 소스가 NSArray 인 것 같습니다. 오류는 데이터 소스에서 아직 존재하지 않는 행에 액세스하려고 시도했음을 의미합니다. 어떻게 NSArray를 현재 할당하고 있습니까? 어떤 경우에? NSArray를 초기화하기 위해 선택 도구를 눌러야합니다. 그냥 -viewDidLoad에서 초기화하십시오. 그런 다음 -pickerView : titleForRow : forComponent가 NSArray의 해당 인덱스 (행)에있는 객체를 반환해야합니다. –

+0

내 NSArray가 viewDidLoad에서 초기화되고 있습니다. 배열에 중단 점을 넣으면 앱이 멈 춥니 다. 나는 뭔가가 아닌 것 같아. – Jeff

2

여기 내 수업의 일부 방법입니다. 사용 가능한 데이터가 인덱스가 있는지 확인 애니메이션 : inComponent을 :

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    currentNumbersOfComponents = 1; 
    //[picker selectRow:2 inComponent:0 animated:NO]; 
} 
- (void) viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    [picker selectRow:2 inComponent:0 animated:YES]; 
} 

#pragma mark picker view data source methods 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
    return currentNumbersOfComponents; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 
    return 5; 
} 

picker.dataSource

자기

당신이 -selectRow 호출하기 전에 settingsPagePicker에 대한 데이터 소스를 확인 했
+0

그래서 난 하나를 만들어 내가 거기에 코드를 배치 앱 충돌 오른쪽 settingsPagePicke. - (void) viewDidAppear : (BOOL) animated {[settingsPagePicker selectRow : 3 inComponent : 0 animated : YES]; [settingsPageNaturalGasPicker reloadAllComponents]; } – Jeff

+0

선택 후에 변경 사항을 보려면 다시로드 할 필요가 없습니다. 그리고 색인 0에있는 구성 요소가 색인 3을 갖는 행을 선택할 수 있도록 최소 4 개의 행을 가지고 있는지 확인하십시오. – Morion

+0

그리고 어쨌든 충돌이 발생하면 오류를 게시하십시오. – Morion