我有一个uipickerview,我试图用coredata数据库中的dr列表填充它。我在viewdidload中加载了dr的列表,并且已经验证了它们是否存在nslog语句。在验证它们在那里之后,我做了一个reloadallcomponents并且我的pickerview显示了适当数量的“?”分数。当我输入断点时,我注意到我的应用程序通过并获取两次行数,并返回相应的数字,但titleforrow方法永远不会被调用。有什么想法吗?
- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
NSLog(@"there are %d doctors",[self.doctors count]);
return [self.doctors count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
NSLog(@"Row %d has dr %@",row,[self.doctors objectAtIndex:row]);
return [self.doctors objectAtIndex:row];
}
答案 0 :(得分:0)
您必须将pickerView.dataSource = ...设置为您的控制器;
答案 1 :(得分:0)
感谢伊戈尔的回答,我走上了正确的轨道。我必须在ViewDidLoad中将委托设置为self。
我已经在类中选择了一个名为doctorPV的插座,因为组件和行方法被正确调用,我认为代理是通过包含pickerviewdelegate协议来推断的。我猜它不是。
我将self.doctorPV.delegate = self添加到我的viewDidLoad中,一切都像魔法一样。
谢谢伊戈尔。
答案 2 :(得分:0)
·H
#import <UIKit/UIKit.h>
@interface PickerViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>
的.m
- (void)viewDidLoad {
[super viewDidLoad];
your picker view controller.delegate=self;
your picker view controller.dataSource=self;
}