【问题标题】:Saving an updated Core Data instance [duplicate]保存更新的核心数据实例 [重复]
【发布时间】:2014-01-13 01:06:45
【问题描述】:

在我的 iOS 应用程序中,我有一个表格视图,显示来自核心数据实体的实例。选择一行后,应用程序会从实例属性值中打开一个视图详细信息,用户可以根据需要更改它们。从表视图控制器中,我使用didSelectRowAtIndexPath 方法传递了NSManagedObject

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {        

    EditToDoViewController *detailViewController = [[EditToDoViewController alloc] initWithNibName:@"EditToDoViewController" bundle:nil];
    NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    detailViewController.selectedObject = selectedObject;
    //[self.navigationController pushViewController:detailViewController animated:YES];

    [self presentViewController:detailViewController animated:YES completion:nil];
}

然后,在EditToDoViewController,我使用文本字段显示实例值,如下所示:

ToDoTextField.text = [[selectedObject valueForKey:@"thingName"]description];

但我现在不知道如何实现保存方法来存储更新的ToDoTextField.textAddToDoViewController 实现文件中,我在保存按钮操作方法中使用以下代码,但我不想插入新对象,我想更新它。

AppDelegate* appDelegate = [AppDelegate sharedAppDelegate];
NSManagedObjectContext* context = appDelegate.managedObjectContext;

NSManagedObject *favoriteThing = [NSEntityDescription insertNewObjectForEntityForName:@"FavoriteThing" inManagedObjectContext:context];
NSString *todoText = ToDoTextField.text;
[favoriteThing setValue:todoText forKey:@"thingName"];
NSError *error;
if(![context save:&error])
{
    NSLog(@"Whoopw,couldn't save:%@", [error localizedDescription]);
}

【问题讨论】:

  • 看看这个对类似问题here的回复。它应该是您正在寻找的。​​span>
  • 谢谢你,这是一个很大的帮助。但@bilobatum 的答案正是我想要的。
  • 一个简单的建议。对变量使用驼峰命名法。因此,ToDoTextField 将变为 toDoTextField

标签: ios core-data nsmanagedobject


【解决方案1】:

AddToDoViewController 不一定要更新托管对象。由于EditToDoViewController 被传递给托管对象,它可以在用户完成编辑时更新托管对象。

// EditToDoViewController implementation
- (IBAction)SaveButtonAction:(id)sender {

    AppDelegate* appDelegate = [AppDelegate sharedAppDelegate];
    NSManagedObjectContext* context = appDelegate.managedObjectContext;

     [selectedObject setValue:ToDoTextField.text forKey:@"thingName"];

    NSError *error;
    if(! [context save:&error])
    {
        NSLog(@"Whoopw,couldn't save:%@", [error localizedDescription]);
    }
}

【讨论】:

  • 你的回答很好,但是有一个问题,编辑对象后回到表格视图,编辑后的对象按预期更改,但没有存储在核心数据中,然后启动应用程序后再次,出现的文字是旧的,而不是更新的......??
  • EditToDoViewController 也可以为你保存到上下文中。我会更新我的答案。
  • 谢谢你,我在等它... :)
  • @mvasco 我不知道是否可以以这种方式编辑用户的答案。因此,我回滚您的更改。在这里,我们将不得不等待主持人。无论如何,您可以编辑您的问题并将整个解决方案放在那里。谢谢。
  • 我同意每个人的编辑。
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多