【发布时间】:2017-09-22 12:37:28
【问题描述】:
我已经研究了很多关于这个主题的其他问题。但是它们都导致相同的事情“视图确实加载了”“视图确实出现了”和“视图将出现”并且我放了
tableview.reloadData()
在所有这些中,但在模式视图关闭后,它仍然不会重新加载,直到我终止应用程序然后我再次运行。我已经看到您可以使用通知中心来执行此操作,并且已经看到 Here 并且我尝试了该方法,但它似乎对我不起作用。 提前感谢您的任何帮助!!!
import UIKit
class mainScreen: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableview: UITableView!
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
// MARK: - Table View Setup
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if allPeople.count == theAssignments.count {
return allPeople.count
}else {
print("else in number of rows in section BAD")
return allPeople.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PeopleTVCell", for: indexPath)
cell.textLabel?.text = theAssignments[indexPath.row]
cell.detailTextLabel?.text = allPeople[indexPath.row]
return cell
}
// MARK: - System setup
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
tableview.allowsSelection = false
/////////here
tableview.reloadData()
}
override func viewWillAppear(_ animated: Bool) {
////////here
tableview.reloadData()
}
override func viewDidAppear(_ animated: Bool) {
let NamesObject = UserDefaults.standard.object(forKey: "Name" + whatGroup)
if let tempItems = NamesObject as? [String] {
allPeople = tempItems
print("saved data in main (Name)")
}
let AssignmentObject = UserDefaults.standard.object(forKey: whatGroup + "Assignment")
if let tempItems = AssignmentObject as? [String] {
theAssignments = tempItems
print("saved data in main (Assignments)")
}
////////here
tableview.reloadData()
}
// MARK: - the Exit Segue
@IBAction func exitSegue(segue: UIStoryboardSegue) {
/////////here
tableview.reloadData()
isAddingName = 2
print("Exited to main")
}
}
这是我要添加东西的地方
@IBAction func saveButton(_ sender: UIButton) {
if isInMain == true {
if IsAddingAssignment == true {
// MARK: Add Assignment
let AssignmentObject = UserDefaults.standard.object(forKey: whatGroup + "Assignment") as? [String]
var Assignment: [String]
if let tempItems = AssignmentObject {
Assignment = tempItems
Assignment.append("\(EnteredObjectTextFeild.text!)")
print(Assignment)
} else {
Assignment = [EnteredObjectTextFeild.text!]
print("user defaults error 2")
}
UserDefaults.standard.set(Assignment, forKey: whatGroup + "Assignment")
EnteredObjectTextFeild.text = ""
}else {
// MARK: Add Name
if AllNames.contains("\(EnteredObjectTextFeild.text!)"){
if namesForEachGroup.contains(EnteredObjectTextFeild.text!) {
EnteredObjectTextFeild.text = ""
AlertAction(Title: "Name Exists", Message: "This name already exists in this group", alerTitle: "OK")
}else {
addNameToGroup()
EnteredObjectTextFeild.text = ""
}
}else {
let NameObject = UserDefaults.standard.object(forKey: "Name") as? [String]
var Name: [String]
if let tempItems = NameObject {
Name = tempItems
Name.append("\(EnteredObjectTextFeild.text!)")
print(Name)
} else {
Name = [EnteredObjectTextFeild.text!]
print("user defaults error 3")
}
UserDefaults.standard.set(Name, forKey: "Name")
addNameToGroup()
EnteredObjectTextFeild.text = ""
NamePicker.reloadAllComponents()
AsignmentPicker.reloadAllComponents()
}
}
}else if isInMain == false {
// MARK: Add Group
if allGroups.contains("\(EnteredObjectTextFeild.text!)"){
EnteredObjectTextFeild.text = ""
AlertAction(Title: "Group Exists", Message: "This Group already exists", alerTitle: "OK")
}else {
let groupsObject = UserDefaults.standard.object(forKey: "Groups") as? [String]
var groups: [String]
if let tempItems = groupsObject {
groups = tempItems
groups.append(EnteredObjectTextFeild.text!)
print(groups)
} else {
groups = [EnteredObjectTextFeild.text!]
print("Bad")
}
UserDefaults.standard.set(groups, forKey: "Groups")
EnteredObjectTextFeild.text = ""
}
NamePicker.reloadAllComponents()
AsignmentPicker.reloadAllComponents()
}
NamePicker.reloadAllComponents()
AsignmentPicker.reloadAllComponents()
}
// MARK: Add Name func
func addNameToGroup(){
let nameObject = UserDefaults.standard.object(forKey: "Name" + whatGroup) as? [String]
var NameForGroup: [String]
if let tempItems = nameObject {
NameForGroup = tempItems
NameForGroup.append("\(EnteredObjectTextFeild.text!)")
print(NameForGroup)
} else {
NameForGroup = [EnteredObjectTextFeild.text!]
print("user defaults error 4")
}
UserDefaults.standard.set(NameForGroup, forKey: "Name" + whatGroup)
namesForEachGroup = NameForGroup
print("saved to group")
EnteredObjectTextFeild.text = ""
NamePicker.reloadAllComponents()
AsignmentPicker.reloadAllComponents()
}
这就是我回到第一个 VC 的地方
@IBAction func BackPressed(_ sender: UIButton) {
if isInMain == true {
performSegue(withIdentifier: "FromAddToMain", sender: UIButton())
}else {
performSegue(withIdentifier: "FromAddToGroup", sender: UIButton())
}
}
【问题讨论】:
-
你从哪里得到你的
allPeople数组?而且,它是如何改变的? -
我遗漏了一些代码,但它在里面
-
添加一些断点以确保您认为应该发生的代码正在发生。我的猜测是从 userdefualts 中提取内容的代码不起作用。希望这会有所帮助!
-
第二次创建第一个视图控制器的实例,当您退出模式时,使用第一个视图控制器的实例重新加载表视图。就像如果 firstVC 是第一个控制器的实例然后调用 firstVC.tableview.reloadData()
-
您可能需要强制用户默认值保存到磁盘,以便您的重新加载代码获取更改。类似: UserDefaults.standard.synchronize() 虽然我认为不再需要了。
标签: ios swift presentmodalviewcontroller