iphone - UIPickerView 出现但不显示数据

标签 iphone ios nsmutablearray uipickerview

过去两天我一直在到处寻找这个问题的答案,但我似乎无法得到它。据我所知,我已正确设置所有内容,但它就是不想工作。

我的应用程序扫描 QRCode 标签并将它们保存到一个可变数组中。我需要创建一种方法,以便用户可以从数组中删除一些标签对象,因此我使用 UIPickerView 来显示标签编号列表,从中选择要删除的标签。

这是我所拥有的:

在.h文件中

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

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

在.m文件中

    @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 中,我为文件所有者设置了数据源、委托(delegate)和 tagPickerView。 UIPickerView 是隐藏的,直到删除命令被调用(在本例中,摇动手机),然后它出现在所有内容之上。

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

我可以使用 NSLog 验证每次执行扫描时数组都被填充了,所以我知道我不是在加载一个空数组。我还可以验证显然正在读取数据源方法,因为我可以将组件的数量更改为 2,并且它会在选择器出现时反射(reflect)出来——两个旋转轮。但我不知道如何验证委托(delegate)方法是否正常工作。

我想知道是否有一种方法可以根据命令填充选择器,比如当手机被摇晃时,而不是使用委托(delegate)......或者它甚至可以那样工作吗?

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

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

但我似乎找不到任何说明如何从根据用户收集的信息创建的数组加载选择器的内容。常识告诉我它应该以同样的方式工作,但我学会了在使用 Objective-C 时放弃常识。

这里有 UIPickerView 专家可以帮助我吗?

谢谢

最佳答案

每当您更改tagPickerData 数组的内容时,您都需要调用[tagPickerView reloadAllComponents]。选择器对其基础数据一无所知——您必须向它发送该消息以让它知道它应该调用其数据源方法。

关于iphone - UIPickerView 出现但不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002417/

相关文章:

iphone - iOS 6 文档文件夹无法自动更新文件

ios - 为什么 NSMutableArray 不工作?

objective-c - 访问 NSMutableArray 组件的特定位

ios - NSMutableArray 的 addObject 方法是线程安全的吗?

iphone - -[CALayer保留] : message sent to deallocated instance

ios - 当 Swift 中的表中的特定内容发生更改时更改表的标题

iPhone 添加(+)按钮操作?

ios - 导致没有 dealloc 被调用的通知

ios - iOS 8 上的 UIWebView 崩溃

iphone - 进入编辑/重新排序模式时 UITableViewCell 自定义绘图和动画