2014-10-10 113 views
1

我被卡住了。我已经调用了PFQuery和我的NSlog我的“类别” ,它在调试器区域都很好。如何使用Parse.com填充UIPickerView

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

这是我想出来的。

请注意,我已经为拾取器已经有必要的方法,我只需要使用解析的数据来填充它。

_pickerData是一个填充选取器的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]; 
} 

回答

0

试试这个,正如上面所说,你需要重新加载pickerView在您的查询找到对象并加载数组后。另请注意,这是一个PFObjects数组,您必须为标题使用键值,您不能只为titleForRow: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"]; 
} 
0

刷新分配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"); 
    } 
}]; 
+0

它不工作时,uipickerview被称为“categoryPicker”但填充选择器的NSArray的是“pickerData” – user2975275 2014-10-10 06:25:11

+0

重装categoryPicker和分配对象为pickerData – abhishekkharwar 2014-10-10 06:39:52

+0

我怎么会去这样做呢? – user2975275 2014-10-10 06:46:03

0
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]; 
} 
+0

未能正常工作,uipickerview被称为'categoryPicker',但填充选择器的nsarray是'pickerData' – user2975275 2014-10-10 06:25:47

+0

使用pickerData作为pickerView的数据源 – 2014-10-10 06:33:03

+0

编辑例如 – 2014-10-10 06:35:32