gpt4 book ai didi

ios - 如何将项目从初始(一次)第一次 View Controller 传递到主视图 Controller 并使用核心数据保存该数据

转载 作者:行者123 更新时间:2023-11-28 05:49:59 25 4
gpt4 key购买 nike

我已经在这个问题上工作了两天,遗憾的是我无法解决我的问题。我试图从我最初的一次性 View Controller 中取出一项并将其发送到我的主视图 Controller ,它将保存在主视图 Controller 中并在重新加载应用程序时出现在该 Controller 上。

这是我的“第一次” View Controller 的应用程序委托(delegate)代码

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

if UserDefaults.standard.bool(forKey: "firstTimer") {
let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)
let mainView = storyBoard.instantiateViewController(withIdentifier: "MainViewControllerID")
let nav = UINavigationController(rootViewController: mainView)
nav.navigationBar.isHidden = true
self.window?.rootViewController = nav
}
return true
}

容器和 saveContext 是默认的

import UIKit

import CoreData

class FirstTimeViewController: UIViewController {

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
private var appDelegate = UIApplication.shared.delegate as! AppDelegate
private var player = [Player]()





@IBOutlet weak var nameTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
}

// This View Controller will only be used once upon the first time the app is being used.

// MARK: Make func that prepares for segue on initial opening of app


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toMainViewController" {
let mainViewController = segue.destination as! UINavigationController
let destination = mainViewController.topViewController as! MainViewController
if let newPlayer = self.nameTextField.text{
destination.name.name = newPlayer
destination.playerData.name = newPlayer
saveItems()
}
}

}

@IBAction func continueButtonPressed(_ sender: UIStoryboardSegue) {
UserDefaults.standard.set(true, forKey: "firstTimer")
let mainPlayer = PlayerData()
let player1 = Player(entity: Player.entity(), insertInto: context)
player1.name = mainPlayer.name
performSegue(withIdentifier: "toMainViewController", sender: self)
saveItems()
}


func saveItems() {
do {
try context.save()
print("File Successfully saved!")
}catch {
print("Error saving Context \(error)")
}
}



// MARK: Function to Save and Load data??
/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/

func loadItems() {
let request = Player.fetchRequest() as NSFetchRequest<Player>
do {
player = try context.fetch(request)
print("Info loaded")
} catch {
print("Error fetching data from context \(error)")
}
}
}

MainViewController 正在发送信息。我只想发送一项并将其保存到该主视图 Controller 。

import UIKit
import Foundation
import CoreData

class MainViewController: UIViewController {
//set up model object, buttons, and labels
// let player: Player!
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
private var appDelegate = UIApplication.shared.delegate as! AppDelegate
// lazy var nameText = Player(context: context)
// var playerInfo = [Player]()
lazy var player = [Player]()
let playerData = PlayerData()
var name = ""


@IBOutlet weak var playerName: UILabel!

@IBOutlet weak var currentLevel: UILabel!

@IBOutlet weak var xpCounter: UILabel!

@IBOutlet weak var playerProfileImage: UIImageView!



override func viewDidLoad() {
super.viewDidLoad()

// loadItems()
// name = playerData.name
if let nameOfPlayer = name.name {
print("This is what we see: \(nameOfPlayer)")
playerName.text = nameOfPlayer
}
appDelegate.saveContext()

}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// loadView()

}

@IBAction func menuButtonPressed(_ sender: Any) {

}

func loadItems() {
let request = Player.fetchRequest() as NSFetchRequest<Player>
do {
player = try context.fetch(request)
print("Info loaded")
} catch {
print("Error fetching data from context \(error)")
}
}
// MARK : Add Name to Main View


// MARK : Add Xp To Main View

// MARK : Add UI Image to profile image view

// MARK: (Optional) Create a 'Choose a task button to segue to the task tab'


// MARK: Program the Progress Bar to update on xp gained and reset on level up


// MARK: Function to Save and Load data??
}

如果需要数据源代码,我会根据要求添加。

谢谢!

最佳答案

代码错误。你应该多做检查

image

关于ios - 如何将项目从初始(一次)第一次 View Controller 传递到主视图 Controller 并使用核心数据保存该数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53294233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com