2016-06-03 5 views
0

Я пытаюсь перезагрузить 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, а не на создание новой. Новые для быстрых и типов и т. Д., Так что пытайтесь все понять прямо в моей голове.

ответ

2

Похоже, что ваши TeamViewController и AddTeamController имеют свой экземпляр TeamModel. Они должны ссылаться на один и тот же экземпляр, чтобы это работало по назначению.

Если вы представите AddTeamController от TeamViewController, то вы должны передать существующий teams значение из TeamViewController в AddTeamController вместо имея AddTeamController создать свой собственный экземпляр TeamModel.

+0

О, хорошо, я задавался вопросом об этом, тупой вопрос от новичка: это будет метод prepareToSegue для передачи значения 'teams'? – Jonnny

+1

Я считаю, что это один из способов. Я не использую раскадровки или segues, поэтому я не совсем уверен, как это работает, но я думаю, что если вы добавите свойство 'TeamModel' в' AddTeamController', вы сможете установить это свойство в 'prepareToSegue'. – rmaddy

+0

Не могли бы вы показать мне, что у меня есть удар, но возникают ошибки компиляции. Уверен, что это тоже очень просто: S – Jonnny

Смежные вопросы