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

时间:2015-07-31 07:18:48

标签: ios core-data nsarray nsmanagedobject nsmanagedobjectcontext

在我的iOS应用中,我使用Coredata来存储数据。在我的应用程序中,我有一个HomeVC,这个HomeVC包含带有复选标记按钮的列表食物。为此,我创建了具有名称和选定属性的“Food”实体。为了在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];

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您希望更改数据,但不存储更改,而是稍后将其丢弃?一个奇怪的要求,但当然可以做到。

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

  • 保存上下文(更改将"向上推〜#34;到父上下文,但在保存主上下文之前不会保存到数据库中)
  • 丢弃上下文(没有保存任何内容)

创建子上下文:

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