2011-11-03 88 views
2

過去兩天我一直在試圖找到答案,但我似乎無法得到它。據我所知,我有一切正確的設置,但它只是不想工作。UIPickerView出現,但不顯示數據

我的應用掃描QRCode標籤並將它們保存到可變數組中。我需要創建一種方式,以便用戶可以從數組中刪除一些標記對象,所以我使用UIPickerView來顯示標記數字列表,從中選擇要刪除的標記。

這是我有:

在.m文件.h文件

@interface ViewController : UIViewController 
    UIPickerView *tagPickerView; 
    NSMutableArray *tagPickerData; 

@property (nonatomic, retain) IBOutlet UIPickerView *tagPickerView; 
@property (nonatomic, retain) NSMutableArray *tagPickerData; 

@synthesize tagPickerView; 
    @synthesize tagPickerData; 

-(void) viewDidLoad{ 
     tagPickerData = [[NSMutableArray alloc]init]; 
     [tagPickerView setDelegate:self]; 
     [tagPickerView setDataSource:self]; 
    } 

- (void) dealloc{ 
    [tagPickerView release]; 
    [tagPickerData release]; 
    [super dealloc]; 
} 

- (void) imagePickerController: (UIImagePickerController*) reader 
    didFinishPickingMediaWithInfo: (NSDictionary*) info 
    { 
    [tagPickerData addObject:tagString]; //tagString is the value returned from the QRCode reader 
} 

    #pragma mark - 
#pragma mark tagPickerView Data Source Methods 
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)tagPickerView{ 
    return 1; 
} 

-(NSInteger)pickerView:(UIPickerView *)tagPickerView 
numberOfRowsInComponent:(NSInteger)component{ 
    return [tagPickerData count]; 


} 

#pragma mark tagPickerView Delegate Methods 
-(NSString *)pickerView:(UIPickerView *)tagPickerView 
      titleForRow:(NSInteger)row 
      forComponent:(NSInteger)component{ 
    return [self.tagPickerData objectAtIndex:row]; 
} 

(我認爲這就是一切。)

在IB我爲文件所有者設置了dataSource,delegate和tagPickerView。 UIPickerView隱藏,直到調用刪除命令(在這種情況下,搖動手機),然後出現在所有內容之上。

我得到的是一個空白的選取器視圖。

我可以使用NSLog驗證數組是否每次執行掃描時都會被填充,所以我知道這不是我正在加載一個空數組。我還可以驗證數據源方法顯然正在被讀取,因爲我可以將組件數量更改爲2,並在拾取器啓動時反映 - 兩個旋轉輪。但我不知道如何驗證委託方法正在工作。

我想知道是否有辦法在命令上填充選取器,比如當電話被動搖時,而不是使用委託...或者它會以這種方式工作嗎?

與所有的參考材料的問題是,它演示瞭如何使用與對象初始化數組,即

NSArray *array = [[NSArray alloc] initWithObjects:@"String 1",@"string 2",@string 3",(etc.) ,nil]; 

但我似乎無法找到任何說明如何加載選擇器來自用戶收集的信息創建的數組。常識告訴我它應該以同樣的方式工作,但是我已經學會了放棄使用Objective-C時的常識。

有沒有可以幫助我的UIPickerView專家?

感謝

回答

1

無論何時更改tagPickerData數組的內容,你需要調用[tagPickerView reloadAllComponents]。選擇器不具備任何底層數據的知識 - 您必須發送該消息讓它知道它應該調用其數據源方法。

+0

完美!這正是我所需要的,我想這比我想象的更直觀。我回顧了所有我見過的例子,並沒有提到使用reloadAllComponents消息。非常感謝! –

+0

不適合我。我有同樣的問題。 –