NSNotification不重新加载表数据

时间:2016-06-03 21:44:01

标签: ios swift

我正在尝试在用户添加一些数据时重新加载tableView。有点麻烦,不知道从哪里去。我打印出数据以确认创建添加到我的阵列的操作,确实如此。确认通知是使用调试器发送的,并尝试在主线程上确认它。

TeamModel

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

TeamViewController

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我segue到另一个tableView添加一个团队,数据添加好了,但是当我返回tableViewController数据时没有改变

AddTeamController

...
// 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。所以这是我的代码添加以及我希望它们如何工作。

TeamViewController

我试过这样的东西,这在其他语言中很好,但看起来你不能在swift中做到。

let t = TeamModel()
let teams = t.teamList

这给了我在TableView中使用的团队以及属性t到我试图在segue中传递的实例化模型。这给了我错误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相同的引用而不是创建一个新的。快速和类型等新手,所以试图让事情直截了当。

1 个答案:

答案 0 :(得分:2)

您的TeamViewControllerAddTeamController看起来都有自己的TeamModel实例。他们需要引用相同的实例才能按预期工作。

如果您从AddTeamController提出TeamViewController,那么您应该将现有的teams值从TeamViewController传递到AddTeamController,而不是AddTeamController创建自己的TeamModel实例。