我被卡住了。我已将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];
}