此 class 与键 itemname 的键值编码不兼容
this class is not key value coding-compliant for the key itemname
我想做的是获取我的 uitextfield 中名为 editItemField
的文本,并将名为 toDoItemName
的 NSString 中的值写入我的核心数据模型,该模型的属性名为 itemname
.
我收到上述错误。我的核心数据模型有一个名为 itemname
的属性,我假设这可能意味着我正在对 NSArray 中的对象执行某些操作,但我不能这样做,因为它不是 managedObjectContext 的一部分?
错误
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key itemname.'
代码
- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
if (self.editItemField) {
// Update existing device
[self.toDoItemName setValue:self.editItemField.text forKey:@"itemname"];
}
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
prepareforsegue
我正在通过此 prepareforsegue 传递 uitableview 中的项目。它在新 viewcontroller 上填充我的 uitextfield。目的是编辑项目,然后用新值更新核心数据模型。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
[segue.destinationViewController setToDoItemName:[item valueForKey:@"itemname"]];
}
}
编辑
谁能告诉我发送 managedObjectContext 看起来是否正确?
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"EditItemSegue"]) {
EditItem *item = [segue destinationViewController];
item.managedObjectContext = _managedObjectContext;
}
}
已更新 segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
EditItem *destination = (EditItem *)segue.destinationViewController;
destination.managedObjectContext=self.managedObjectContext;
destination.toDoItem = item;
}
}
[NSManagedObject rangeOfCharacterFromSet:]:无法识别的选择器发送到实例 0x7fc223f5d350 2015-06-11 23:10:31.717 LittleToDoApp[95329:10363535] *** 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序,原因:-[ NSManagedObject rangeOfCharacterFromSet:]: 无法识别的选择器发送到实例 0x7fc223f5d350
我从来没有见过这个错误。这是因为它不知道在 EditItem 视图中将它发送到哪里吗?当我点击 uitableview 中的项目时,这当然会发生。
您需要将 NSManagedObject
实例发送到您的下一个视图控制器,而不仅仅是一个字符串
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
NextVCClass *destination = (NextVCClass *)segues.destinationViewController;
destination.managedObjectContext=self.managedObjectContext;
destination.toDoItem=item;
}
}
您需要将 NextVCClass 更改为目标 UIViewController subclass
的 class
我想做的是获取我的 uitextfield 中名为 editItemField
的文本,并将名为 toDoItemName
的 NSString 中的值写入我的核心数据模型,该模型的属性名为 itemname
.
我收到上述错误。我的核心数据模型有一个名为 itemname
的属性,我假设这可能意味着我正在对 NSArray 中的对象执行某些操作,但我不能这样做,因为它不是 managedObjectContext 的一部分?
错误
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key itemname.'
代码
- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
if (self.editItemField) {
// Update existing device
[self.toDoItemName setValue:self.editItemField.text forKey:@"itemname"];
}
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
prepareforsegue
我正在通过此 prepareforsegue 传递 uitableview 中的项目。它在新 viewcontroller 上填充我的 uitextfield。目的是编辑项目,然后用新值更新核心数据模型。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
[segue.destinationViewController setToDoItemName:[item valueForKey:@"itemname"]];
}
}
编辑
谁能告诉我发送 managedObjectContext 看起来是否正确?
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"EditItemSegue"]) {
EditItem *item = [segue destinationViewController];
item.managedObjectContext = _managedObjectContext;
}
}
已更新 segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
EditItem *destination = (EditItem *)segue.destinationViewController;
destination.managedObjectContext=self.managedObjectContext;
destination.toDoItem = item;
}
}
[NSManagedObject rangeOfCharacterFromSet:]:无法识别的选择器发送到实例 0x7fc223f5d350 2015-06-11 23:10:31.717 LittleToDoApp[95329:10363535] *** 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序,原因:-[ NSManagedObject rangeOfCharacterFromSet:]: 无法识别的选择器发送到实例 0x7fc223f5d350
我从来没有见过这个错误。这是因为它不知道在 EditItem 视图中将它发送到哪里吗?当我点击 uitableview 中的项目时,这当然会发生。
您需要将 NSManagedObject
实例发送到您的下一个视图控制器,而不仅仅是一个字符串
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
NextVCClass *destination = (NextVCClass *)segues.destinationViewController;
destination.managedObjectContext=self.managedObjectContext;
destination.toDoItem=item;
}
}
您需要将 NextVCClass 更改为目标 UIViewController subclass
的 class