Необходимо обновить только последнюю запись для NSManagedObject - PullRequest
0 голосов
/ 27 марта 2019

Я хотел бы обновить только последнюю запись в соответствующем атрибуте.Моя функция ниже обновляет все записи, а не только последние.Я пробовал другие альтернативы и до сих пор не могу обновить только последнюю запись.Любые предложения с благодарностью!

public func updateLastRecordForEntityManagedObject(_ attributes:    
String...,booleanAttrType: [Bool],stringAttrType: [String,   
erManagedObject: [NSManagedObject] ,
inManagedObjectContext managedObjectContext: NSManagedObjectContext){

erManagedObject.forEach {

//Here, I attempt to Print the last record
if let lastRecord = erManagedObject.last{
    print(" Last Record: \(lastRecord)")

    // Use closures to pass the parameters ($0) and update the last 
    record 

    $0.setValue(booleanAttrType[0], forKeyPath: attributes[0])
    $0.setValue(stringAttrType[0], forKeyPath: attributes[1])

    //Attempt to save the respective records
    do {
    try managedObjectContext.save()
    } catch let error as NSError {
    print("(UPDATE_LAST_RECORD_ERROR) \(error), \
    (error.userInfo)")
    }      
  }
 }
}

1 Ответ

0 голосов
/ 27 марта 2019

Я решил проблему. Вот решение:

public func updateLastRecordForEntityManagedObject(_ entity: String, _ 
attributes: String...,
booleanAttrType: [Bool], stringAttrType: [String],uuidAttrType:
[UUID],intAttrType:[Int64],
erManagedObject: [NSManagedObject] ,
inManagedObjectContext managedObjectContext: NSManagedObjectContext){

    // Retrieve and Print out the total records
    let recordCount =  erManagedObject.count
    print(" Total Records: \(recordCount)")

        //Obtain the index of the last record and update the record
        if let lastRecord = erManagedObject.last{
            //Print the last record
            print(" Last Record: \(lastRecord)")
            // Obtain the index
            let index = erManagedObject.endIndex - 1
            //Update the last record
            erManagedObject[index].setValue(booleanAttrType[0], forKeyPath: attributes[0])
            erManagedObject[index].setValue(stringAttrType[0], forKeyPath: attributes[1])

            //Attempt to save the record
            do {
                try managedObjectContext.save()
            } catch let error as NSError {
                print("(UPDATE_LAST_RECORD_ERROR) \(error), \(error.userInfo)")
            }
        }
    }
...