2017-05-30 18 views
0

サーバから情報を取得する必要があります。
そして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が保存されたかどうかを確認することです。私が別のレコードを追加する前に保存されていた場合。それでは、どうすれば既存のものを更新できますか? この問題を解決するには良い方法ですか?

+0

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

答えて

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() 
} 
関連する問題