2017-02-17 145 views
0

您好我需要覆盖CoreData上的值(如果已经存在)。例如,如果已经在CoreData我有乔希我需要删除今明保存新的乔希覆盖核心数据值

func save(value:String, forkey:String) { 
    let context = getContext() 
    let entity = NSEntityDescription.entity(forEntityName: "Lastname", in: context) 

    let add = NSManagedObject(entity: entity!, insertInto: context) 
    add.setValue(value, forKey: forkey) 

    do { 
     try context.save() 
     print("save -> \(value)") 
    } catch { 
     print("err \(error)") 
    } 
} 
+0

看看这个教程https://www.raywenderlich.com/145809/getting-started-core-data-tutorial。所有基本的方法都在这里很好的描述和实施。 – Oleshko

+0

你的意思是如果在核心数据中发现更新值,你的意思是? – Aditya

+0

@Adi是的,对不起;)检查 - >如果发现删除并保存 - >如果不仅保存 – k0le

回答

0

我们可以检查值是否存在与否。然后,更新和数据库

class func checkAndUpdateAtIndex(entry_id: String, comment_text: String, comment_name: String, comment_pic: String, comment_date: String, comment_id: String, comment_isDeleted: String, comment_userid: String) { 
    let context: NSManagedObjectContext = DataAccess.shared.managedObjectContext 
    let request = NSFetchRequest(entityName: "Comment") 
    request.predicate = NSPredicate(format: "comment_id = %@", comment_id) 

    if let fetchResults = (try? DataAccess.shared.managedObjectContext.executeFetchRequest(request)) as? [NSManagedObject] { 
     if fetchResults.count != 0{ 
      //update value 
      var managedObject = fetchResults as! [Comment] 
      managedObject[0].setValue(entry_id, forKey: "entry_id") 
      managedObject[0].setValue(comment_text, forKey: "comment_text") 
      managedObject[0].setValue(comment_name, forKey: "comment_name") 
      managedObject[0].setValue(comment_pic, forKey: "comment_pic") 

     }else { 
      // create new entity if not found 
      let newItems = NSEntityDescription.insertNewObjectForEntityForName("Comment", inManagedObjectContext: context) as! Comment 

      newItems.entry_id = entry_id 
      newItems.comment_text = comment_text 
      newItems.comment_name = comment_name 
      newItems.comment_pic = comment_pic    
     } 


      do { 
       try context.save() 
      } catch {} 
    } 
} 

在这种更新方法创造价值,我首先让我们想更新实体,然后在那个地方存储新值。

0
  • 取物的对象。
  • 创建一个新的对象,如果没有。
  • 更新的属性。
  • 保存上下文。

func save(value:String, for key:String) { 
    let context = getContext() 
    let request = NSFetchRequest(entityName: "Lastname") 
    let predicate = NSPredicate(format:"%K == %@", value, key) 
    request.predicate = predicate 
    do { 
     let fetchResults = try context.executeFetchRequest(request) 
     let object : NSManagedObject 
     if fetchResults.isEmpty { 
      let entity = NSEntityDescription.entity(forEntityName: "Lastname", in: context) 
      object = NSManagedObject(entity: entity!, insertInto: context) 
     } else } 
      object = fetchResults[0] 
     } 

     object.setValue(value, forKey: key) 

     try context.save() 
     print("save -> \(value)") 
    } catch { 
     print("err \(error)") 
    } 
} 

注:我没有使用斯威夫特2了,可能会出现一个编译器错误。

+0

它的工作,但如果价值不是实体它给错误,因为“在实体中找不到” – k0le