웹 서비스에서 데이터를로드하고 배열을 채울 메서드가 있습니다. 제대로 작동합니다 ("get_data"라고 부름). 나는이 배열 ("arr")을 피커 뷰 ("pv")의 데이터 소스로 사용하며, 내 app를 실행할 때 pickerview가 항목들로 가득 차있다. 어느 날 나는 "활동 지시자"("ai")를 사용하기로 결정했다. 그리고 지금 "pv"는 항상 비어 있으며, 그것을 고치는 방법을 모른다. 다음은 내 코드입니다.pickerview에 데이터를 채우고 동시에 활동 표시기를 실행하는 방법은 무엇입니까?
- (void) viewDidLoad {
[super viewDidLoad];
[ai startAnimation]; // ACTIVITY INDICATOR STARTS SPINNING.
[self performSelector:@selector(get_data) // FILL ARRAY.
withObject:nil
afterDelay:0]; }
//-------------------------------------------------------------------
- (void) get_data { // CALL WEB SERVICE, FILL ARRAY WITH JSON DATA.
[ai stopAnimation]; } // SPINNING STOPS AFTER LONG TASK.
//-------------------------------------------------------------------
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1; }
//-------------------------------------------------------------------
- (NSInteger)pickerView :(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
return [arr count]; }
//-------------------------------------------------------------------
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component {
return [arr objectAtIndex:row]; }
//-------------------------------------------------------------------
- (void) pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component {
index = [pv selectedRowInComponent:0]; } // INDEX IS A GLOBAL INT.
//-------------------------------------------------------------------
- (NSAttributedString *) pickerView:(UIPickerView *)pickerView
attributedTitleForRow:(NSInteger)row
forComponent:(NSInteger)component {
NSString * title = [arr objectAtIndex:row];
NSAttributedString * attString = [[NSAttributedString alloc]
initWithString:title attributes:
@{NSForegroundColorAttributeName:
[UIColor blackColor]}];
return attString; }
"performSelector"로 "활동 표시기"를 사용했으며 정상적으로 작동했습니다. 필자가 이해할 수없는 것은 pickerview 메소드가 배열과 함께 더 이상 작동하지 않는 이유입니다. 따라서 제 질문은 pickerview에 데이터를 채우고 동시에 활동 표시기를 실행하는 방법입니다.
I이, pickerview 작품처럼 내의 viewDidLoad을 변경할 수 있지만 작동 표시등이 켜지지 않는 경우 : 당신이 performSelector:
를 사용할 때 당신은 단순히 직접 선택이라고했던 것처럼
- (void) viewDidLoad {
[super viewDidLoad];
/* [ai startAnimation]; // ACTIVITY INDICATOR STARTS SPINNING.
[self performSelector:@selector(get_data) // FILL ARRAY.
withObject:nil
afterDelay:0]; */
[self get_data];
}
피커 데이터 소스 방법에 중단 점을 두어 웹 서비스가 완료되고 활동 표시기가 중지 된 후 적중 여부를 확인하십시오. 그리고'arr'에는 여러분이 생각하는 객체가 포함되어 있는지 확인하십시오. – Stonz2
친애하는 Stonz2 님, 당신이 제안한대로했는데 arr이 데이터로 가득차 있지만 pickerview 메서드가 전혀 실행되지 않습니다. –