数据如何存储在核心数据模型中(属性)

时间:2015-11-28 15:11:53

标签: ios objective-c core-data

我不熟悉ios。在这里,我从核心数据开始。这个教程链接core data。在这里我理解了模型和创建属性。就像输入所有数据后我们必须按save然后输入的数据将保存在模型中并显示在表格视图中。 我知道managed object是我们的应用程序代码创建的用于存储数据的对象。

我怀疑:

save按钮后。如何触发输入的数据以在表格视图中显示,以及数据如何在模型(核心数据)中保存。我对此部分感到困惑。

当我们输入所有数据并按save时,数据如何保存在核心数据中并显示在表格视图中。它是如何工作的。我在理论和实践方面都在寻求。

在表格视图中将哪个方法触发到display该数据。以及entered data are storing in core data (model)

的方式

如果我们删除tableview中的任何数据,那么数据也不会显示在模型中。如何,这是如何工作的。当我们按save数据如何保存在核心数据(模型 - 属性)

中时

示例:

他们使用3个属性:

  1. 公司
  2. 名称
  3. 版本
  4. 我不知道他们是如何储蓄的。请不要投票。这是我的第一个问题,它将有助于即将到来的初学者。谢谢

1 个答案:

答案 0 :(得分:1)

  

当我们输入所有数据时,当我们按下保存数据如何保存在核心数据中时......

保存按钮有一个-save:动作,当您按下按钮时会触发该动作。该方法如下所示:

- (IBAction)save:(id)sender {
    NSManagedObjectContext *context = [self managedObjectContext];

    // Create a new managed object
    NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Device" inManagedObjectContext:context];
    [newDevice setValue:self.nameTextField.text forKey:@"name"];
    [newDevice setValue:self.versionTextField.text forKey:@"version"];
    [newDevice setValue:self.companyTextField.text forKey:@"company"];

    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];
}

这种方法的重要思想是:

  • 托管对象上下文:该方法的第一件事是获取对应用程序的托管对象上下文的引用,即管理所有托管对象的对象。

    < / LI>
  • 创建托管对象:接下来,该方法创建一个包含设备信息的新托管对象。它存储您在新对象中输入的数据。该对象已属于​​托管对象上下文,因为您必须在创建托管对象时指定MOC。

  • 保存上下文: if语句的条件部分中的调用保存上下文,即将其更改写入持久存储。

    < / LI>

在本教程的后面,修改了-save:方法以更新现有对象。您可以查看代码并查看该方法的版本首先检查视图控制器是否正在使用现有对象;如果是,则更改该对象而不是创建新对象。

  

...并在表格视图中显示。

标准UIViewController方法之一是-viewDidAppear:DeviceViewController会覆盖此方法,如下所示:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    // Fetch the devices from persistent data store
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Device"];
    self.devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    [self.tableView reloadData];
}

如您所见,此方法可以完成以下任务:

  • 获取托管对象上下文:如果没有MOC,则无法访问Core Data对象。

  • 创建并执行获取请求:获取请求是从Core Data存储中检索特定对象的方式。获取请求的结果是一个对象数组,它被保存到视图控制器的devices属性中。

  • 重新加载表格:将-reloadData消息发送到表会告诉它(意外)从其数据源加载一组新数据。视图控制器是表的数据源,因此当表要求新单元时,视图控制器使用其devices属性中的对象配置每个单元。