gpt4 book ai didi

ios - Swift:在 UITabView 之间传递数据并允许全局访问数据

转载 作者:行者123 更新时间:2023-11-28 15:42:46 25 4
gpt4 key购买 nike

首先,让我解释一下我的应用及其流程。应用程序打开,用户创建配置文件(将所有数据存储在 [String: Any] 类型的字典中)。用户点击创建后,它会将他们发送到控制台屏幕(显示用户输入的部分信息,例如通过 segue 显示他们的姓名)。有一个选项卡可以让他们编辑他们的个人资料(姓名、体重、地址等)。当用户编辑他们的信息(更改他们的姓名、体重等)时,它也应该更新控制台页面上显示的信息。

我的主要问题是,我该如何构造它,以便数据对所有选项卡 View 普遍可用。更具体地说,数据不是实例或数据的副本。我创建了一个名为 Person 的类,其中存储了所有变量(firstNamelastName 等)。我已经尝试在 UIViewController 类声明之前将 person 类的实例声明为变量,但它不允许我使用 UITextField .text 属性(因为它们还没有被创建...?)。

这是我的 Person 类...

class Person {

var firstName: String
var lastName: String
var phoneNumber: String
var weight: Int
var gender: String
var streetAddress: String
var cityState: String

init(firstName: String, lastName: String, phoneNumber: String, weight: Int, gender: String, streetAddress: String, cityState: String) {
self.firstName = firstName
self.lastName = lastName
self.phoneNumber = phoneNumber
self.weight = weight
self.gender = gender
self.streetAddress = streetAddress
self.cityState = cityState
}
}

我还将 UITabBarController 子类化为 TabBarViewController 因为我读到过您可以将数据发送到子类化的 viewController 并使其成为普遍适用于所有嵌入式选项卡。我只是不知道它是如何工作的。

我很抱歉可能会问一个重复的问题......我已经查看/研究过这个问题,但我没有找到适合我的特殊情况的解决方案。

更新代码以将数据保存为 CoreData...

    guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let userInfo = PInfo(firstName: firstNameField.text, lastName: lastNameField.text, cityState: cityStateField.text, streetAddress: streetAddressField.text, gender: genderInputField.text, userWeight: 200)

save(withPersonInfo: userInfo, withContext: managedContext)

我能够访问各种 viewControllers 中的数据,但它会将其作为单个项目数组返回给我...理想情况下,我希望将它们作为 key:value 对,因此我可以轻松地将它们设置为在 Edit Profile viewController 中显示和编辑。

谢谢!

最佳答案

一个非常简单的解决方案是为您的应用委托(delegate)一个初始化为空 Person 的 person 属性。这解决了问题,因为每个类都可以访问该属性:

let p = (UIApplication.shared.delegate as! AppDelegate).person

此外,p 通过引用获取此 Person,因此对其属性的任何更改都会反射(reflect)回 person 属性本身,以供查看(和更改)下一个 View Controller 。

一个更复杂、更令人满意的解决方案,因为只有 一个 用户要配置,将让 Person 类本身分配一个 shared person 实例作为单例. (在 SO 上搜索以了解如何在 Swift 中实现单例。)同样,该单例将普遍可用:

let p = Person.shared()

关于ios - Swift:在 UITabView 之间传递数据并允许全局访问数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43532295/

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