Ios 具有不同视图控制器的核心数据

Ios 具有不同视图控制器的核心数据,ios,swift,core-data,uikit,Ios,Swift,Core Data,Uikit,我仍然没有在核心数据中获得一些概念。请记住,我的应用程序从一个ViewController开始,它接受用户的一些输入。一旦用户单击UI按钮,它就会将其转换为下一个ViewController。事实并非如此,问题在于我在UIButton的操作出口内创建了一个核心数据对象: // Creating a new username & Saving it to Core Data let newUser = UserInfo(context: self.context) newU

我仍然没有在核心数据中获得一些概念。请记住,我的应用程序从一个ViewController开始,它接受用户的一些输入。一旦用户单击UI按钮,它就会将其转换为下一个ViewController。事实并非如此,问题在于我在UIButton的操作出口内创建了一个核心数据对象:

// Creating a new username & Saving it to Core Data
    let newUser = UserInfo(context: self.context)
    newUser.name = usersName.text
    newUser.birthday = bdPicker.date
    newUser.gender = genderTextField.text!
    newUser.prevTested = yesOrNoTextField.text!
    newUser.score = 0
我在第一个ViewController中将上下文声明为全局:

var info:[UserInfo]?
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

现在,在所有剩余的ViewController中,我需要修改
newUser.score
实体。由于该应用程序是问答式的,因此每次在每个视图控制器中向用户显示问题时,我都需要修改分数。我尝试了很多解决方案,但都没有成功。我被告知应该创建
newUser
作为属性而不是局部变量。这是怎么可能的?

一个选项是使用单例模式。本质上,您创建了一个新类,并创建了一个静态变量(按照惯例,通常命名为
shared
),该变量被初始化为该类的实例。将newUser属性添加到此类,然后可以在所有ViewController中查看或修改其状态

class Singleton{

     var shared = Singleton()

      //Declare your newUser here
}


此外,如果您在应用程序中使用CoreData,我强烈建议您在
上下文中使用全局变量,并在ViewController类中放置CoreData保存逻辑。相反,编写另一个类,例如
CoreDataManager
CoreDataService
(您可以随意调用它),并将上下文声明为该类的属性,以便在创建、获取和保存操作中使用它。

看起来您忘记编写:
context.save()
创建新用户后。@TheSwiftCoder不,它在那里,但我没有把它包括在问题中。1。每次进行更改时,都会使用context.save()。2.从数据库中获取对象,然后转到新的视图控制器。不要将同一对象传递给下一个控制器。3.您可以在查询db表时使用谓词。如果我为核心数据(如
CoreDataManager
)创建一个专用文件,AppDelegate有什么用途,因为它有核心数据堆栈
persistentContainer
saveContext
方法?此外,除了上下文之外,我还可以在这个
CoreDataManager
中包括什么?