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

时间:2017-05-30 06:28:57

标签: ios swift core-data

我需要从服务器获取一些信息 然后我需要使用CoreData保存它们。
问题是具有相同属性的相同记录被多次保存 我想将新记录保存到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是否已保存。如果它保存之前我不应该添加另一条记录。那么我该如何更新现有的呢? 这是解决这个问题的好方法吗?

1 个答案:

答案 0 :(得分:0)

首先检查您的记录是否存在于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
        }

插入可用时更新,否则创建新记录。

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()
}