Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 作为单例的托管对象上下文?_Ios_Swift_Core Data_Nsmanagedobjectcontext - Fatal编程技术网

Ios 作为单例的托管对象上下文?

Ios 作为单例的托管对象上下文?,ios,swift,core-data,nsmanagedobjectcontext,Ios,Swift,Core Data,Nsmanagedobjectcontext,我的应用程序面临问题,如果我创建或删除一个新对象,然后将该对象保存在另一个实体对象中,然后返回并尝试创建第一个实体类型的新对象,我的应用程序将崩溃 然后,我可以重新打开然后应用程序,使对象崩溃的应用程序没有问题 这一切都是通过核心数据完成的,有一个练习,练习被保存为例程,然后在创建例程后创建一个新的练习将使应用程序崩溃。此外,删除一个练习和一个例行程序,然后立即尝试创建一个新的,也会使应用程序崩溃 我花了很长时间阅读这篇文章,认为可能的原因是托管对象上下文,并想知道将其创建为单例是否是解决方案?

我的应用程序面临问题,如果我创建或删除一个新对象,然后将该对象保存在另一个实体对象中,然后返回并尝试创建第一个实体类型的新对象,我的应用程序将崩溃

然后,我可以重新打开然后应用程序,使对象崩溃的应用程序没有问题

这一切都是通过核心数据完成的,有一个练习,练习被保存为例程,然后在创建例程后创建一个新的练习将使应用程序崩溃。此外,删除一个练习和一个例行程序,然后立即尝试创建一个新的,也会使应用程序崩溃

我花了很长时间阅读这篇文章,认为可能的原因是托管对象上下文,并想知道将其创建为单例是否是解决方案?我通过在每个VC的viewdidload中运行以下命令来设置MoC:

func getMainContext() -> NSManagedObjectContext {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    return appDelegate.persistentContainer.viewContext
}
然后,我通过.self引用这个VC级别变量,只要我需要引用MoC,就可以避免与在VC中创建进一步的MoC发生冲突

我认为这应该可以防止出现问题,因为所有核心数据工作都与共享MoC相关联。然而,如上所述,仍有碰撞发生

下面是一个控制台打印的崩溃,希望将缩小来源

致命错误:保存上下文失败:错误域=NSCOCAERRORDOMAIN代码=134020“(null)”UserInfo={NSAffectedObjectErrorKey=(实体:UserExecute;id:0x600000025060

下面列出了触发此操作的代码块,例如应用程序中的1个位置,以澄清此操作仅在我刚刚删除其他对象时发生,如果我现在重新加载应用程序,此代码将正常工作并保存:

func createExercise() {
    print("SAVE EXERCISE PRESSED")

    if userExercise == nil {
        print("SAVING THE NEW EXERCISE")

        let newUserExercise = UserExercise(context: self.managedObjectContext!)
        newUserExercise.name = userExerciseName.text
        newUserExercise.sets = Int64(userSetsCount)
        newUserExercise.reps = Int64(userRepsCount)
        newUserExercise.dateCreated = NSDate()
        newUserExercise.hasBeenTickedDone = false 

     } if self.associatedRoutineToAddTo != nil {

            let fetchRequest: NSFetchRequest<UserRoutine> = UserRoutine.fetchRequest()
            fetchRequest.predicate = NSPredicate(format: "name == %@", self.associatedRoutineToAddTo!)

            do {
                let existingUserRoutine = try self.managedObjectContext!.fetch(fetchRequest).first
                print("RETRIVED ROUTINES ARRAY CONTAINING \(existingUserRoutine)")
                existingUserRoutine?.addToUserexercises(newUserExercise) 
                print("EXERCISE SUCESSFULLY ADDED TO ROUTINE")
            } catch {
                print("Fetching Routine Failed")
            }
            } else if self.associatedRoutineToAddTo == nil {
            print("THIS IS A FRESH EXERCISE WITHOUT A PARENT ROUTINE")
        }

    } else if let userExercise = userExercise {
        print("UPDATING THE EXISTING EXERCISE")
        userExercise.name = userExerciseName.text
        userExercise.sets = Int64(userSetsCount)
        userExercise.reps = Int64(userRepsCount)
    }

    do {
        try self.managedObjectContext?.save()
        print("THE EXERCISE HAS BEEN SAVED")
    } catch {
        fatalError("Failure to save context: \(error)")
    }

我收到“NSCOCAERRORDOMAIN Code=134020(null)”错误,因为我的新实体未添加到正确的CoreData配置中。

我收到的是“NSCOCAERRORDOMAIN Code=134020(null)”错误,因为我的新实体未添加到正确的CoreData配置中。

您的模型中是否定义了任何强制属性?您的模型中是否定义了任何其他约束?所有内容都是可选的,因此我认为这可能不是原因,已经检查过了!您是否始终在主线程上运行?我假设是这样,我不知道i don’我不太了解线程核心数据,你有没有在模型中定义的强制属性?你有没有在模型中定义的其他约束?一切都是可选的,所以我不认为这可能是原因,已经检查过了!你总是在主线程上运行吗?我假设是这样,我没有设置它还有别的吗?我对线程coredata不太了解
var managedObjectContext: NSManagedObjectContext!
var userExercise: UserExercise?
var associatedRoutineToAddTo : String?
var editingUserExerciseID: NSManagedObjectID?
var editingUserExercise: UserExercise?