我需要从服务器获取一些信息
然后我需要使用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
是否已保存。如果它保存之前我不应该添加另一条记录。那么我该如何更新现有的呢?
这是解决这个问题的好方法吗?
答案 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()
}