使用Swift更新实体记录而不是使用CoreData创建新记录

问题描述:

我需要从服务器获取一些信息。
然后我需要使用CoreData保存它们。
问题是具有相同属性的相同记录多次保存。
我想将新记录保存到CoreData并更新现有的记录。
使用Swift更新实体记录而不是使用CoreData创建新记录

func saveChanges() throws { 
     var error: ErrorType? 
     mainQueueContext.performBlockAndWait() { 
      if self.mainQueueContext.hasChanges { 
       do { 
        try self.mainQueueContext.save() 
       } catch let saveError { 
        error = saveError 
       } 
      } 
     } 
     if let error = error { 
      throw error 
     } 
    } 

func fetchRecentPosts(completion completion: (PostResult) -> Void){ 

    . 
    . 
    . 
    do{ 
     try self.coreDataStack.saveChanges() 
     print("now data is saved in this device") 

    } 
    catch let error { 
     result = .Failure(error) 
    } 
    . 
    . 
    . 
} 

我的想法是,以检查是否是id得救了。如果在我不应该添加另一条记录之前保存它。那我该如何更新现有的? 这是解决这个问题的好方法吗?如果你的纪录DB

static func getMyRecord(with id : String, context : NSManagedObjectContext) -> MyRecord? { 
      let fetchRequest: NSFetchRequest< MyRecord> = MyRecord.fetchRequest() 
      fetchRequest.predicate = NSPredicate(format: "id = %@", id) 
      let foundRecordsArray = try! context.fetch(fetchRequest) 
      if foundRecordsArray.count > 0 { 
       return foundRecordsArray[0] 
      } 
      return nil 
     } 

存在

+0

https://*.com/a/38459233/5461400 @آژانسکتاب –

首先检查虽然插入如果有更新它在其他创造新的纪录。

static func insertRecord(_ record : MyRecord, context : NSManagaedObjectContext) { 
    let foundRecord = DataInserterClass. getMyRecord(with: yourID, context: context) 
      if foundRecord == nil { 
       //create new record 
      } 
      else { 
       //update foundRecord 
      } 
      try! context.save() 
}