首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >此类不兼容键项名称的键值编码。

此类不兼容键项名称的键值编码。
EN

Stack Overflow用户
提问于 2015-06-12 00:39:44
回答 1查看 420关注 0票数 0

我要做的是将我的uitextfield中的文本称为editItemField,并将名为toDoItemName的NSString中的值写入具有名为itemname的属性的核心数据模型中。

我得到了上面的错误。我的核心数据模型有一个名为itemname的属性,我认为这可能意味着我正在处理来自NSArray的对象,但我不能这样做,因为它不是managedObjectContext的一部分?

误差

setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key itemname.'

代码语言:javascript
复制
- (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

我把项目从uitableview通过这个预付费。它在新的视图控制器上填充我的uitextfield。其目的是编辑项目,然后用新值更新核心数据模型。

代码语言:javascript
复制
-(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时这看起来是否正确吗?

代码语言:javascript
复制
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"EditItemSegue"]) {
    EditItem *item = [segue destinationViewController];
    item.managedObjectContext = _managedObjectContext;
}
}

更新的segue

代码语言:javascript
复制
-(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 LittleToDoApp95329:10363535 *由于未识别的异常NSInvalidArgumentException,原因:-NSManagedObject rangeOfCharacterFromSet::未识别的选择器发送到实例0x7fc223f5d350

我从没见过这个错误。这是因为它不知道在EditItem视图中将它发送到哪里吗?当然,当我点击uitableview中的一个项目时,就会发生这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 01:57:51

您需要将NSManagedObject实例发送到下一个视图控制器,而不仅仅是一个字符串。

代码语言:javascript
复制
-(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子类的类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30793642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档