簡體   English   中英

使用Swift更新實體記錄而不是使用CoreData創建新記錄

[英]Updating an entity record instead of creating a new record with CoreData using Swift

我需要從服務器獲取一些信息。
然后我需要使用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已保存。 如果已保存,則不應添加其他記錄。 那我該如何更新現有的呢? 這是解決此問題的好方法嗎?

首先檢查您的記錄是否存在於數據庫中

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM