ios - Swift 改变 Coredata 的值,而不是创建新的

标签 ios swift core-data

我是新人,不懂任何 objC,也没有快速的教程。

我正在做一周计划的应用程序,我有按钮,可以将我添加到每一天 -姓名 -代码名称 -任务01 。 。 -任务10

但如果我想用另一个按钮编辑特定的一天,我总是删除其余的日子。我创建了一个有很多零的新实体,只有一天充满了信息。这是我的贫民窟解决方案,但它工作不正常,它工作了几次,然后它说它有大约 512 个 searchResults.count 并开始滞后并且不工作...

请帮助我,如何更改特定属性的值而不创建新实体

这是我星期二编辑的代码(本周其余时间与星期一相同,但代码很长,所以这里只有星期一和星期二的代码):

func getAndPrintData () {

    let fetchRequest: NSFetchRequest<Workout> = Workout.fetchRequest()

    do {
        let searchResults = try getContext().fetch(fetchRequest)
        print ("num of results = \(searchResults.count)")
        for works in searchResults as [NSManagedObject] {


            if let moc = managedObjectContext {
                let workout = Workout(context: moc)

                workout.mondayNameCD = works.value(forKey: "mondayNameCD") as! String?
                workout.mondayCodeNameCD = works.value(forKey: "mondayCodeNameCD") as! String?
                workout.mondayTask01 = works.value(forKey: "mondayTaks01") as! String?
                workout.mondayTask02 = works.value(forKey: "mondayTaks02") as! String?
                workout.mondayTask03 = works.value(forKey: "mondayTaks03") as! String?
                workout.mondayTask04 = works.value(forKey: "mondayTaks04") as! String?
                workout.mondayTask05 = works.value(forKey: "mondayTaks05") as! String?
                workout.mondayTask06 = works.value(forKey: "mondayTaks06") as! String?
                workout.mondayTask07 = works.value(forKey: "mondayTaks07") as! String?
                workout.mondayTask08 = works.value(forKey: "mondayTaks08") as! String?
                workout.mondayTask09 = works.value(forKey: "mondayTaks09") as! String?
                workout.mondayTask10 = works.value(forKey: "mondayTaks10") as! String?
                workout.tuesdayNameCD = DayName.text!
                workout.tuesdayCodeNameCD = CodeNameTextField.text!
                workout.tuesdayFocusCD = IconImageTextField.text!
                workout.tuesdayTask01 = Task01TextField.text!
                workout.tuesdayTask02 = Task02TextField.text!
                workout.tuesdayTask03 = Task03TextField.text!
                workout.tuesdayTask04 = Task04TextField.text!
                workout.tuesdayTask05 = Task05TextField.text!
                workout.tuesdayTask06 = Task06TextField.text!
                workout.tuesdayTask07 = Task07TextField.text!
                workout.tuesdayTask08 = Task08TextField.text!
                workout.tuesdayTask09 = Task09TextField.text!
                workout.tuesdayTask10 = Task10TextField.text!
            }
        }
    } catch {
        print("Error with request: \(error)")
    }
    saveToCoreData() {
        self.navigationController!.popToRootViewController(animated: true)
    }
}

func saveToCoreData(completion: @escaping ()->Void){
    managedObjectContext!.perform {
        do {
            try self.managedObjectContext?.save()
            completion()
            print("Product saved to CoreData")
        } catch let error {
            print("Could not save Product to CoreData: \(error.localizedDescription)")
        }
    }
}

var managedObjectContext: NSManagedObjectContext? {
    return (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
}

func getContext () -> NSManagedObjectContext {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    return appDelegate.persistentContainer.viewContext
}

最佳答案

在 for 循环内,您已经有一个托管对象works。只需更新其上的值,而不是创建新的锻炼

关于ios - Swift 改变 Coredata 的值,而不是创建新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247600/

相关文章:

ios - 如何将手势限制在 UIImageView 的范围内?

ios - 我可以重写 prepare for segue 方法以便使用 UIViewController 扩展添加一些代码吗?

ios - 在 Google map 上使用动画在多个位置之间移动标记

ios - UITextView 文本开箱即用

ios - 基于MKAnnotion删除核心数据对象

ios - 核心数据简单关系-NSSet

core-data - 如何判断 `NSManagedObject` 是否已被删除?

ios 如何让 UITextView 检测到一次点击?

ios - 创建目录和调用 setResourceValue 的正确位置在哪里?

ios - uitableViewCell 滚动时未加载