如何从 PickerView 中的 Core Data 中获取数据? iOS

Posted

技术标签:

【中文标题】如何从 PickerView 中的 Core Data 中获取数据? iOS【英文标题】:How to get the data from the Core Data in PickerView? iOS 【发布时间】:2016-03-27 18:42:22 【问题描述】:

有一个应用程序有一个员工列表和一个指令列表。当您在 TextField 中创建订单时,PickerView 应该会出现一个员工列表(带有姓名)。我将按如下方式实现:

- (void)viewDidLoad 
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Employees"];
        self.empl=[[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
        UIPickerView *picker = [[UIPickerView alloc]init];
        picker.dataSource = self;
        picker.delegate = self;
        [picker setShowsSelectionIndicator:YES];
        [self.empTaskField setInputView:picker];




 #pragma mark - UIPickerView DataSource Method
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

    return 1;



- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

        return self->_empl.count;

    

    #pragma mark - UIPickerView Delegate Method

    -(NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
        return [_empl objectAtIndex:row];
    

当你点击错误出现在TextField上时:

27/03/2016 23 : 32 : 57.177 员工任务 [ 2730 : 150090 ] - [Employees copyWithZone:]:发送到实例的无法识别的选择器 0x7fcf2ac84fd0 2016-03-27 23:32:57.513 员工任务 [2730: 150090 ] *** 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'- [员工 copyWithZone:]: 无法识别的选择器发送到实例 0x7fcf2ac84fd0'

如何解决这个问题?

【问题讨论】:

你的问题是这一行:self.empl=[[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; Employees 没有实现NSCopying 协议。 【参考方案1】:

删除 mutableCopy 。 NSManagedObject 不符合 NSCopying 协议。所以你的获取代码应该是

self.empl=[managedObjectContext executeFetchRequest:fetchRequest error:nil];

【讨论】:

В настоящее время в списке вместо nameEmployee написано "NUL" in PickerView 你需要传递一个 NSString 作为标题。例如return [[_empl objectAtIndex:row] valueForkey:@"empName"];【参考方案2】:

=> 你应该以字符串的形式返回,所以你应该获取键的特定索引行并返回它..就像下面的代码

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component NSArray
    Teacher *teacher = teacherForSubjectArray[row];
    NSString *teacherName = [NSString stringWithFormat:@"%@ %@ %@", teacher.firstName, teacher.middleName, teacher.lastName];
    return teacherName;

【讨论】:

你必须作为你的情况传递:[_empl objectAtIndex:row]; 这并不能解决我的问题(现在 PeckerView 中的列表为空

以上是关于如何从 PickerView 中的 Core Data 中获取数据? iOS的主要内容,如果未能解决你的问题,请参考以下文章

从pickerview中的另一列确定一列值

如何从pickerview更改颜色选择的拾取值?

iPhone Core Data 对象添加到 NSMutableArray

如何根据另一个pickervew更改pickerview中的选择?

没有从 PickerView 获取选定的值

如何在 swift 2.2 中更改 pickerview 中的文本/字体大小?