我想做的是获取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从uitable视图传递了该项目。它在新的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:3​​1.717 LittleToDoApp [95329:10363535] ***由于未捕获的异常NSInvalidArgumentException而终止了应用程序,原因:-[NSManagedObject rangeOfCharacterFromSet:]:无法识别发送到实例0x7fc223f5d350

我从未见过此错误。这是因为它不知道将其发送到EditItem视图中的何处?当然,当我在uitable视图中点击一个项目时,就会发生这种情况。

最佳答案

您需要将NSManagedObject实例发送到下一个视图控制器,而不仅仅是单个String

-(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子类的类

关于ios - 此类与键itemname的键值编码不兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30793642/

10-12 00:27