使用 Coredata 一起更新特定值(在所有表中通用)
Posted
技术标签:
【中文标题】使用 Coredata 一起更新特定值(在所有表中通用)【英文标题】:Updating a particular value (common in all tables) together using Coredata 【发布时间】:2018-04-06 05:55:11 【问题描述】:我的核心数据结构中有很多表。所有实体都有一个名为is_sync
的公共属性,默认值为0。现在单击应用程序中其他位置的sync
按钮,我想将所有表中is_sync
的值从0 更新为1 . 我怎样才能做到这一点...?
我如何更新单个表中的值(对于不同的场景)的一个例子是这样的......
let fetchRequest: NSFetchRequest<NewProduct> = NewProduct.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "sku = %@", dfg!)
do
let array_categories = try managedContext.fetch(fetchRequest)
let cat = array_categories[0]
cat.setValue(false, forKey: "isAddToCartVar")
try managedContext.save()
catch let error as NSError
print("Could not save. \(error), \(error.userInfo)")
但是我怎样才能同时更新所有表中的共同值(就像我在问题中解释的那样)...?
【问题讨论】:
根据您的功能在唯一表(如配置文件)中添加属性 is_sync,然后当您同步该配置文件时 is_sync 值将是 0 到 1。 所有表都有is_sync
值并且同步发生在所有表上。所以我想一起更新所有表的is_sync
的值...
如果您想对每个实例进行相同的更新,请查看NSBatchUpdateRequest
。
【参考方案1】:
您可以使用它来更新 Core Data 中的标志:
func update()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "SyncData")
do
let results = try context.fetch(request)
if results.count > 0
for result in results as! [NSManagedObject]
if let is_SyncFlag = result.value(forKey: "is_sync")
if is_SyncFlag == 0
result.setValue(1, forKey: "is_sync")
do
try context.save()
catch
catch
您可以在一个通用函数中为每个表执行此操作
【讨论】:
是的,就像您可以创建一个通用的可重用函数,该函数可以每次都为所有通用表调用。这只是一个演示代码供您参考,因为我不知道您是如何使用的 @v.bw 如果对您有帮助,请批准。 绝对是@Abhirajsinh Thakore。如果可行,我会接受并支持您的回答... 是的@v.bw 如果您遇到任何问题,请随时询问。 它工作了@Abhirajsinh Thakore。非常感谢。也投了赞成票..:)以上是关于使用 Coredata 一起更新特定值(在所有表中通用)的主要内容,如果未能解决你的问题,请参考以下文章