出现UIPickerView但不显示数据

时间:2011-11-03 21:57:30

标签: iphone ios nsmutablearray uipickerview

过去两天我一直在寻找答案,但我似乎无法得到它。据我所知,我已经正确设置了一切,但它只是不想工作。

我的应用扫描QRCode标记并将其保存到可变数组中。我需要创建一种方法,以便用户可以从数组中删除一些标记对象,所以我使用UIPickerView显示标记数字列表,从中选择要删除的标记。

这就是我所拥有的:

<。>文件中的

@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中,我为File的所有者设置了dataSource,delegate和tagPickerView。 UIPickerView被隐藏,直到调用删除命令(在这种情况下,摇动手机),然后它出现在所有内容之上。

我得到的是一个空白的选择器视图。

我可以使用NSLog验证每次执行扫描时是否正在填充数组,所以我知道这不是我正在加载一个空数组。我还可以验证数据源方法是否正在被读取,因为我可以将组件数量更改为2,并在拾取器出现时反映出来 - 两个旋转轮。但我不知道如何验证Delegate方法是否正常工作。

我想知道是否有办法在命令上填充选择器,比如电话被动摇,而不是使用代表......或者它是否会以这种方式工作?

所有参考资料的问题在于它演示了如何使用用对象初始化的数组,即

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

但我似乎无法找到任何显示如何从用户收集的信息创建的数组中加载选择器的内容。常识告诉我它应该以相同的方式工作,但我在使用Objective-C时已经学会放弃常识。

是否有可以帮助我的UIPickerView专家?

由于

1 个答案:

答案 0 :(得分:1)

每当您更改tagPickerData数组的内容时,都需要调用[tagPickerView reloadAllComponents]。选择器不了解其底层数据 - 您必须发送该消息以告知它应该调用其数据源方法。