如何从 PickerView 的 Core Data 中获取数据? iOS
How to get the data from the Core Data in PickerView? iOS
有一个应用程序包含员工列表和说明列表。当您在 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];
}
当您单击文本字段时出现错误:
27/03/2016 23 : 32 : 57.177 Employee Task [ 2730 : 150090 ] -
[Employees copyWithZone:]: unrecognized selector sent to instance
0x7fcf2ac84fd0 2016-03-27 23 : 32 : 57.513 Employee Task [ 2730 :
150090 ] *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '- [Employees copyWithZone:]:
unrecognized selector sent to instance 0x7fcf2ac84fd0'
如何解决这个问题?
=> 你应该 return 作为字符串,所以你应该获取键的特定索引行和 return 它..就像下面的代码
-(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;
}
删除 mutableCopy
。 NSManagedObject 不符合 NSCopying 协议。所以你的获取代码应该是
self.empl=[managedObjectContext executeFetchRequest:fetchRequest error:nil];
有一个应用程序包含员工列表和说明列表。当您在 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];
}
当您单击文本字段时出现错误:
27/03/2016 23 : 32 : 57.177 Employee Task [ 2730 : 150090 ] - [Employees copyWithZone:]: unrecognized selector sent to instance 0x7fcf2ac84fd0 2016-03-27 23 : 32 : 57.513 Employee Task [ 2730 : 150090 ] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '- [Employees copyWithZone:]: unrecognized selector sent to instance 0x7fcf2ac84fd0'
如何解决这个问题?
=> 你应该 return 作为字符串,所以你应该获取键的特定索引行和 return 它..就像下面的代码
-(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;
}
删除 mutableCopy
。 NSManagedObject 不符合 NSCopying 协议。所以你的获取代码应该是
self.empl=[managedObjectContext executeFetchRequest:fetchRequest error:nil];