UIPickerView 未填充从 CoreData 获取的数据

Posted

技术标签:

【中文标题】UIPickerView 未填充从 CoreData 获取的数据【英文标题】:UIPickerView is not populated with data fetched from CoreData 【发布时间】:2014-04-10 13:59:08 【问题描述】:

所以这是我的问题。我正在尝试从 CoreData 获取值,我的数据表中有数据,因此我不明白为什么会发生这种情况。当我打开托管 UIPickerView 的视图时,没有数据存在。

下面是我的代码。

ViewController 标头:

#import <UIKit/UIKit.h>

 @interface EBPaymentViewController : UIViewController <UIPickerViewDelegate>

 @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
 @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
 @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator    *persistentStoreCoordinator;

@property (nonatomic, strong) NSMutableArray *voucherTypes;
@property (weak, nonatomic) IBOutlet UIPickerView *voucherTypePicker;

@end

下面是我的 viewDidLoad

- (void)viewDidLoad

     [super viewDidLoad];
     // Do any additional setup after loading the view.

     // load the data from the database and populate the UIPickerView.
     EBAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
     _managedObjectContext = [appDelegate managedObjectContext];

     NSFetchRequest *request = [[NSFetchRequest alloc] init];
     NSEntityDescription *vouchers
         = [NSEntityDescription entityForName:@"VoucherTypes"     inManagedObjectContext:_managedObjectContext];

    [request setEntity:vouchers];

     NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"voucherType" ascending:YES];
     NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:descriptor, nil];
     [request setSortDescriptors:sortDescriptors];

     NSError *error = nil;
     NSMutableArray *mutableFetchResults = [[_managedObjectContext   executeFetchRequest:request error:&error] mutableCopy];

    if(mutableFetchResults == nil)
    
    // handle error
    

    [self setVoucherTypes:mutableFetchResults];


最后是我的 titleForRow:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row   forComponent:(NSInteger)component

    return [voucherTypes objectAtIndex:row];

UIPickerView 只是空的。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

在您获取之后,您需要设置[myPicker setDataSource:self],然后从 UIPickerDataSource 协议实现方法 '[pickerView:numberOfRowsInComponent:]'

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
    return [voucherTypes count];

【讨论】:

感谢 Rob 的帮助,这似乎奏效了。还有一个问题,如何设置 UIPickerView 以显示数组中对象的凭证类型属性。 很高兴它有效。要设置项目标签,您的 UIPickerViewDelegate 可以实现 pickerView:titleForRow:forComponent: 并为每一行返回您想要的任何属性。在这种情况下,我认为只需返回voucherType[row];但你已经在做对了吗?你有没有加过[myPicker setDelegate:self]?该代码是否正在执行?你在看什么? 失败,出现 'NSInvalidArgumentException',原因:'-[NSManagedObject copyWithZone:]: unrecognized selector sent to instance 0x8ccbab0' 嗯。返回 [voucherTypes objectAtIndex:row];是您的托管对象之一——您想要做的是获取该对象的一些 NSString 属性,然后返回它! 改为:return [[voucherTypes objectAtIndex:row] couponType]; - 这应该根据方法的定义返回一个 NSSString,但是我得到的只是 UIPickerView 中的问号。

以上是关于UIPickerView 未填充从 CoreData 获取的数据的主要内容,如果未能解决你的问题,请参考以下文章

数组中的数据未显示在第二个 UIPickerView 中

如果 UIPickerView 未触及,则 UIPickerView 选择第 0 行

使用 http 请求填充 UIPickerView 数据

从 NSArray 对象设置 UIPickerView

如何使用 JSON 数组填充 UIPickerView? [关闭]

UIpickerView 在同一个 ScrollView 中填充多个 uitextFields