Я пытаюсь перезагрузить tableView, когда пользователь добавляет некоторые данные. Имея небольшую проблему с этим и не совсем уверен, куда идти отсюда. Я распечатал данные, чтобы подтвердить действие создания добавлений в мой массив, и это так. Подтвержденное уведомление отправляется с помощью отладчика и пытается подтвердить его также в основном потоке.NSNotification не перезагружает данные таблицы
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 было то, что я мог бы использовать подготовить SEGUE. Так что это мои дополнения к коду и как я ожидал их работы.
TeamViewController
Я пытался что-то вроде этого, и это хорошо на других языках, но, кажется, вы не можете сделать это в стрижа.
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, а не на создание новой. Новые для быстрых и типов и т. Д., Так что пытайтесь все понять прямо в моей голове.
О, хорошо, я задавался вопросом об этом, тупой вопрос от новичка: это будет метод prepareToSegue для передачи значения 'teams'? – Jonnny
Я считаю, что это один из способов. Я не использую раскадровки или segues, поэтому я не совсем уверен, как это работает, но я думаю, что если вы добавите свойство 'TeamModel' в' AddTeamController', вы сможете установить это свойство в 'prepareToSegue'. – rmaddy
Не могли бы вы показать мне, что у меня есть удар, но возникают ошибки компиляции. Уверен, что это тоже очень просто: S – Jonnny