Ios 如何在核心数据模型(属性)中存储数据
我刚开始使用ios学习。这里我从核心数据开始。这里是教程链接。这里我了解了模型和创建属性。输入所有数据后,我们必须按Ios 如何在核心数据模型(属性)中存储数据,ios,objective-c,core-data,Ios,Objective C,Core Data,我刚开始使用ios学习。这里我从核心数据开始。这里是教程链接。这里我了解了模型和创建属性。输入所有数据后,我们必须按保存,然后输入的数据将保存在模型中,并显示在表视图中。 我知道托管对象是由我们的应用程序代码创建的用于存储数据的对象 我的怀疑: 按下保存按钮后。如何触发输入的数据在表视图中显示,以及该数据如何保存在模型(核心数据)中。我对这部分感到困惑 当我们输入所有数据时,当我们按下保存时,数据如何保存在核心数据中,以及如何在表视图中显示。它是如何工作的。我要求在理论和实践的方式 触发哪个方法
保存
,然后输入的数据将保存在模型中,并显示在表视图中。
我知道托管对象
是由我们的应用程序代码创建的用于存储数据的对象
我的怀疑:
按下保存
按钮后。如何触发输入的数据在表视图中显示,以及该数据如何保存在模型(核心数据)中。我对这部分感到困惑
当我们输入所有数据时,当我们按下保存
时,数据如何保存在核心数据中,以及如何在表视图中显示。它是如何工作的。我要求在理论和实践的方式
触发哪个方法在表视图中显示该数据。以及输入的数据如何存储在核心数据(模型)
若我们删除tableview中的任何数据,那个么该数据也不会显示在模型中。这是怎么回事。当我们按下save
时,数据如何保存在核心数据中(模型-属性)
例如:
它们使用3个属性:
-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];
}
这种方法的重要思想是:
- 托管对象上下文:该方法要做的第一件事是获取对应用程序托管对象上下文的引用,即管理所有托管对象的对象
- 创建托管对象:接下来,该方法创建一个新的托管对象,该对象将包含设备信息。它存储您在新对象中输入的数据。该对象已属于托管对象上下文,因为在创建托管对象时必须指定MOC
- 保存上下文:如果
语句保存了上下文,则在
语句的条件部分调用,即将其更改写入持久存储
-save:
方法以同时更新现有对象。您可以查看代码,并看到该版本的方法首先检查视图控制器是否正在处理现有对象;如果是,则会更改该对象,而不是创建新对象
…和正在表视图中显示
标准的UIViewController
方法之一是-viewdide:
,并且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,您无法访问核心数据对象
- 创建并执行提取请求:提取请求是从核心数据存储中检索特定对象的方式。fetch请求的结果是一个对象数组,该数组保存到视图控制器的
属性中devices
- 重新加载表格:向表格发送
消息,告诉表格(意外地)从其数据源加载一组新数据。视图控制器是表的数据源,因此当表请求新单元格时,视图控制器使用其-reloadData
属性中的对象配置每个单元格devices
持久存储
上下文
是托管对象上下文,它是NSManagedObjectContext
的一个实例。持久存储、持久存储协调器和托管对象模型是任何核心数据应用程序中最重要的对象,您应该在中了解它们。最后一个问题,context
是否用于维护核心数据堆栈的托管对象上下文层中包含的对象的状态,?是,context
是指向托管对象上下文的指针。该对象类似于“便笺簿”,也就是说,您可以在上下文中对对象进行更改,而这些更改只存在于上下文中,直到您保存上下文,此时更改将写入持久存储。