ios - NSNotification 不重新加载表数据

标签 ios swift

我正在尝试在用户添加一些数据时重新加载 tableView。在这方面遇到了一些麻烦,并且不确定从这里去哪里。我已经打印出数据以确认创建添加到我的数组的操作并且确实如此。确认通知是使用调试器发送的,并尝试确认它也在主线程上。

团队模型

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

添加团队 Controller

...
// 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 中使用的团队以及我将尝试在 segue 中传递的实例化模型的属性 t。这给我错误 instance member t cannot be used on type TeamViewController。我也在 TeamViewController 中引用的 segue 是:

    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 的相同引用,而不是创建一个新引用。对 swift 和 types 等不熟悉,所以想把事情弄清楚。

最佳答案

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

如果您从 TeamViewController 中呈现 AddTeamController,那么您应该将 TeamViewController 中的现有 teams 值传递给AddTeamController 而不是让 AddTeamController 创建它自己的 TeamModel 实例。

关于ios - NSNotification 不重新加载表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37623911/

相关文章:

ios - 在 Cocoapod 中集成 plcrashreporter?

swift - 使用 WKWebView 以编程方式添加 ActivityIndi​​cator 时出现问题,未出现

ios - 如何在应用程序重新打开时重置本地通知

ios - 位置服务权限不断消失

Swift:为符合通用协议(protocol)的通用类创建包装类时出错

ios - 使用 uiactivityviewcontroller 共享图像和视频

ios - 按下按钮时激活 TextField

ios - preferredStatusBarStyle 不符合 iOS 13

iOS 显示警报 Controller 对象

ios - 如何设置imageView的圆角半径?