我的数据库在更新本地数组中的 NSManageObject 时得到更新

Posted

技术标签:

【中文标题】我的数据库在更新本地数组中的 NSManageObject 时得到更新【英文标题】:My database getting updated while updating NSManageObject in the local array 【发布时间】:2015-07-31 07:18:47 【问题描述】:

在我的 ios 应用程序中,我使用 Coredata 来存储数据。在我的应用程序中,我有一个 HomeVC,这个 HomeVC 包含带有复选标记按钮的食物列表。为此,我创建了具有名称和选定属性的“食物”实体。为了在 HomeVC 中显示食物列表,我从数据库中获取数据并存储到本地数组中,并将这个数组绑定到 tableView。当用户单击检查按钮时,我已更新此本地数组中的选定属性。一切正常。

我在更新本地数组中的选定属性时遇到问题,这个属性也被更改到数据库中。

编辑:

NSEntityDescription* entityDesc = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext];
NSFetchRequest* fetchReq = [[NSFetchRequest alloc]init];
[fetchReq setEntity:entityDesc];

// Fetching rows from database
NSArray* results = [self.managedObjectContext executeFetchRequest:fetchReq error:nil];

 //Assigning results to local array
_localArray = [NSMutableArray arrayWithArray:results];

有人知道怎么解决吗?

【问题讨论】:

如何将数据分配给本地数组? @Vishnuvardhan,请查看我的编辑。我已经添加了源代码。 【参考方案1】:

所以您想更改数据,但不存储更改并在以后丢弃它们?一个奇怪的要求,但当然可以做到。

您需要创建一个新的托管对象上下文,该上下文可以将应用的主上下文作为父上下文。然后你可以选择:

保存上下文(更改将被“推送”到父上下文,但在保存主上下文之前不会保存到数据库中) 丢弃上下文(不保存任何内容)

创建子上下文:

let childContext = 
       NSManagedObjectContext(concurrencyType:.MainQueueConcurrencyType)
childContext.parentContext = mainContext

【讨论】:

以上是关于我的数据库在更新本地数组中的 NSManageObject 时得到更新的主要内容,如果未能解决你的问题,请参考以下文章

如何更新本地存储中的 json 值

将数组保存并更新到本地存储JS

使用本地 json 文件中的数据更新 swift UI 中的列表

使用 Core Data 时是不是需要本地数组?

Vue 未使用来自 Axios 请求的数据更新数组中的 Vuetify 数据表

数据方法中的数组在一种方法中得到更新,但在另一种方法中仍然为空