当用户添加一些数据时,我正在尝试重新加载tableView。有点小麻烦,也不知道该怎么办。我已经打印出数据以确认创建adds到我的数组的操作,它确实是这样。确认使用调试器发送通知,并尝试确认它也在主线程上。
团队模型

class TeamModel {

// a type of team
typealias Team = (String, Int, Int, Int)

// current list of teams
var teamList : [Team] = [("Manchester", 2, 40, 11), ("Arsenal", 2, 45, 11)]

// adds a new team to the user's list of teams
func addTeamToDB(newTeam: Team) {
    teamList.append(newTeam)
    NSNotificationCenter.defaultCenter().postNotificationName("reloadTeams", object: nil)

    }
}

我的初始数据加载到TableView中
团队视图控制器
class TeamViewController: UITableViewController {

// pointer to table
@IBOutlet var table: UITableView!

// reference to team Model
let teams = TeamModel().teamList

override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(reloadTableData(_:)), name: "reloadTeams", object: nil)
}

func reloadTableData(notification: NSNotification) {
    table.reloadData()
}

从这个tableView我转到另一个tableView添加一个团队,数据添加正常,但是当我返回tableViewController时,数据不会改变
添加工作组控制器
...
// get pointer to model
private var newTeam = TeamModel()

@IBAction func addTeamToDB(sender: UIBarButtonItem) {
    let newTeamInfo = (teamName.text!, numberOfPlayersSliderValue, periodLengthSliderValue, numberOfPlayersSliderValue)

    newTeam.addTeamToDB(newTeamInfo)

    // return back to nav controller
    self.dismissViewControllerAnimated(true, completion: nil)
}
...

更新
所以我从@rmaddy那里得到的理解是我可以用prepare segue。所以这是我的代码添加和我期望他们如何工作。
团队视图控制器
我试过这样的方法,在其他语言中也很好,但似乎你不能很快做到。
let t = TeamModel()
let teams = t.teamList

这给了我TableView中使用的团队,也给了我要在segue中尝试传递的实例化模型一个属性t。这给了我一个错误instance member t cannot be used on type TeamViewController。我在TeamViewController中也提到:
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "addTeamSegue"
    {
        if let destinationVC = segue.destinationViewController as? TeamDetailsViewController{
            // send data
            destinationVC.tt = t
        }
    }
}

我在TeamDetailsViewController中创建了一个要更新的属性,如下所示:
var tt : TeamModel?

这样我就可以在按钮操作中运行:tt?.addTeamToDB(newTeamInfo),当我向模型中添加新团队时,我会调用该操作,因为我知道我需要对TeamModel的相同引用,而不是创建新的引用。对斯威夫特和其他类型的人来说都是新手,所以尽量把事情弄清楚。

最佳答案

看起来你的TeamViewControllerAddTeamController都有自己的TeamModel实例。它们需要引用同一个实例才能按预期工作。
如果你从AddTeamController呈现TeamViewController,那么你应该将现有的teams值从TeamViewController传递到AddTeamController,而不是让AddTeamController创建它自己的TeamModel的实例。

10-08 07:45
查看更多