如何使用Parse.com填充UIPickerView



我被卡住了。我已将PFQuery和NSlog称为我的"类别"在调试器区域一切都很好。

我遇到的问题是使用这些数据从Parse.com填充我的UIPickerView。

以下是我的想法。

请注意,我已经为Picker提供了必要的方法,我只需要使用解析中的数据来填充它

_pickerData是一个填充picker的NSArray,我想我可以等于要填充的对象,但这不起作用。

编辑:到目前为止我所拥有的

 - (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    PFQuery *query = [PFQuery queryWithClassName:@"Categories"];
    [query whereKeyExists:@"Category"];
    [query orderByDescending:@"createdAt"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            _pickerData = objects;
            NSLog(@"%@",objects);
        }
        else {
            NSLog(@"error");
        }
    }];

    self.categoryPicker.dataSource = self;
    self.categoryPicker.delegate = self;

}

// The number of columns of data
- (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}
// The number of rows of data
- (int)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _pickerData.count;
}
// The data to return for the row and component (column) that's being passed in
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return _pickerData[row];
}

试试这个,如上所述,在查询找到对象并加载数组后,您需要重新加载pickerView。还要注意,这是一个PFObject数组,并且必须为title使用键值,不能只为title ForRow:DataSource调用插入PFObject。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.categoryPicker.dataSource = self;
    self.categoryPicker.delegate = self;
    PFQuery *query = [PFQuery queryWithClassName:@"Categories"];
    [query whereKeyExists:@"Category"];
    [query orderByDescending:@"createdAt"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            _pickerData = objects;
            [self.categoryPicker reloadAllComponents];
        }
        else {
            NSLog(@"error");
        }
    }];
}

// The number of columns of data
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}
// The number of rows of data
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _pickerData.count;
}
// The data to return for the row and component (column) that's being passed in
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    PFObject *object = _pickerData[row];
    //Assuming "Category" is a string here for your title
    return object[@"Category"];
}

objects分配给_pickerData 后重新加载选择器视图

PFQuery *query = [PFQuery queryWithClassName:@"Categories"];
[query whereKeyExists:@"Category"];
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        _pickerData = objects;
      [_categoryPicker reloadData];
      NSLog(@"%@",objects);
    }
    else {
        NSLog(@"error");
    }
}];
PFQuery *query = [PFQuery queryWithClassName:@"Categories"];
    [query whereKeyExists:@"Category"];
    [query orderByDescending:@"createdAt"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            _pickerData = objects;
             // update pickerView
             [categoryPicker reloadAllComponents];
            NSLog(@"%@",objects);
        }
        else {
            NSLog(@"error");
        }
    }];

加载数据后,使用[categoryPicker reloadAllComponents];更新pickerView。

编辑:

设置委托&来源//连接数据

self.categoryPicker.dataSource = self;
self.categoryPicker.delegate = self;

添加方法:

// The number of columns of data
- (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}
// The number of rows of data
- (int)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _pickerData.count;
}
// The data to return for the row and component (column) that's being passed in
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return _pickerData[row];
}

最新更新