Ios 具有不同视图控制器的核心数据
我仍然没有在核心数据中获得一些概念。请记住,我的应用程序从一个ViewController开始,它接受用户的一些输入。一旦用户单击UI按钮,它就会将其转换为下一个ViewController。事实并非如此,问题在于我在UIButton的操作出口内创建了一个核心数据对象: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
// 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
中包括什么?