gpt4 book ai didi

ios - 每次用户签名时,TableView 都会重新加载并添加(重复)原始数据

转载 作者:行者123 更新时间:2023-11-30 11:12:30 26 4
gpt4 key购买 nike

我在 iOS 应用程序中使用 Firebase 登录时遇到了表格 View 问题。该表从子提要加载内容。当我第一次登录时,表加载正常,但如果我注销并再次登录,表会重新加载所有数据,将原始数据添加到表的内容中。我尝试在重新加载之前检查表是否为空,但没有效果。

关闭应用程序没有问题。仅当用户使用帐户 View Controller 中的签名按钮退出应用程序并重新登录时,才会出现此问题。我想弄清楚是什么使表向其添加相同的数据,或者当用户使用时清空表退出但无法弄清楚其中任何一个。

这是加载函数的代码。我已将此代码放置在 viewWillAppear 或 viewDidLoad 中,但没有区别。

    if tableView.visibleCells.isEmpty {
loadTableData()
} else {
//do something
}

这是我的加载数据函数

func loadTableData() {
let url = "https://JSONurl.json"
let headers: HTTPHeaders = [
"X-API-Key": api.key,
"Accept": "application/json"
]

Alamofire.request(url, headers: headers).validate().responseJSON { response in
switch response.result {
case .success:
if let value = response.result.value {
let json = JSON(value)
self.parseJSON(json: json)
self.tableView.reloadData()
}
case .failure(let error):
let alert = UIAlertController(title: "title", message: "message", preferredStyle: UIAlertControllerStyle.alert)
let okAction = UIAlertAction(title: "title", style: UIAlertActionStyle.default, handler: nil)
alert.addAction(okAction)
self.present(alert, animated: true, completion: nil)
print(error)
}
}
}

在我的签名 View Controller 中,我使用以下代码对用户进行身份验证

func authenticateUser() {
guard let userEmailAddress = userEmailAddressTextField.text, !userEmailAddress.isEmpty else {
// alert error message
return
}

guard let userPassword = userPasswordTextField.text, !userPassword.isEmpty else {
// alert error message
return
}

Auth.auth().signIn(withEmail: userEmailAddress, password: userPassword) {
(user, error) in
if let error = error {
self.commonFunctions.showAlertMessage(viewController: self, alertTitle: AppConstants.AlertMessages.firebaseAuthErrorTitle, messageToDisplay: error.localizedDescription)
return
}
if user != nil {
let mainPage = self.storyboard?.instantiateViewController(withIdentifier: "viewControllerWithTable") as! UITabBarController
self.present(mainPage, animated: true, completion: nil)
}
}
}

这是我在 didFinishLaunchingWithOptions 函数内的 AppDelegate 中的代码。这样用户在关闭应用程序时就不必再次登录。

    if Auth.auth().currentUser != nil && Auth.auth().currentUser!.isEmailVerified {
let mainStoryBoard: UIStoryboard = UIStoryboard(name:"Main", bundle:nil)
let nextView: UITabBarController = mainStoryBoard.instantiateViewController(withIdentifier: "viewControllerWithTable") as! UITabBarController
self.window?.rootViewController = nextView
}

我的parseJSON如下:

func parseJSON(json: JSON) {
for item in json["results"][0]["members"].arrayValue {
item.id = (item["id"].stringValue)
// omitted extra data
let eachItem = ItemInit(id: item.id!)
items.group.append(eachItem)
}
sortData()
utils.hideActivityIndicator()
}

当用户点击按钮时,我的注销位于 IBAction 内。我将用户发送回 WelcomeViewController,用户可以在其中选择如何再次登录(电子邮件、社交媒体)。

    do {

try Auth.auth().signOut()
let nextView = self.storyboard?.instantiateViewController(withIdentifier: "WelcomeViewController") as! WelcomeViewController
let appDelegate = UIApplication.shared.delegate
appDelegate?.window??.rootViewController = nextView

} catch{
// alert user
}

最佳答案

在添加任何内容之前尝试清理数据源。

func parseJSON(json: JSON) {
items.group.removeAll()
for item in json["results"][0]["members"].arrayValue {
item.id = (item["id"].stringValue)
// omitted extra data
let eachItem = ItemInit(id: item.id!)
items.group.append(eachItem)
}
sortData()
utils.hideActivityIndicator()
}

关于ios - 每次用户签名时,TableView 都会重新加载并添加(重复)原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52040530/

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