TableViewがすぐ更新されない
最初に表示されるViewController
のTextField
に値を入れてそれをデータベースに入れ、次にデータベースの値をTableView
に一覧表示するViewController
を表示した時に、先ほど入れた値がTableViewに表示されません。一度アプリを終了してもう一度立ち上げてTableView
のViewController
を表示すると値は表示されています。しかし値を入れてからすぐに反映させたいです。次のやり方を試したのですが、ダメでした。
ちなみにTabBarController
を使っています。
どうすればすぐにデータベースに入れた値をTableView
に反映させることができるでしょうか?
どなたか分かる方がいれば教えていただきたいです。すみませんが、よろしくお願いします。
最初のViewController
@IBAction func registerWord(sender: AnyObject) {
if self.textField.text == "" {
} else {
let dbhelper = DatabaseHelper()
dbhelper.inputWordToDatabase(self.registerWordStore, registerSpeech: self.registerSpeechStore)
self.textField.text = ""
showCompleteAlert()
}
}
データベースを処理するクラス
func inputWordToDatabase(registerWord: String, registerSpeech: String) {
let ud = NSUserDefaults.standardUserDefaults()
autoincrementId = ud.integerForKey("incrementKey")
let word = Word()
word.id = autoincrementId
word.speech = registerSpeech
word.word = registerWord
let realm = RLMRealm.defaultRealm()
realm.transactionWithBlock({ () -> Void in
realm.addObject(word)
})
autoincrementId++
ud.setInteger(autoincrementId, forKey: "incrementKey")
}
func outputWord(speech: String) -> Array<String> {
var wordData: [String] = []
let wordArray = Word.objectsWhere("speech CONTAINS %@", speech)
for item in wordArray {
if let wordStore = item as? Word {
wordData.append(wordStore.word)
}
}
return wordData
}
TableViewのViewController
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.segmentedControl.addTarget(self, action: "changeData:", forControlEvents: .ValueChanged)
let dbhelper = DatabaseHelper()
nounData = dbhelper.outputWord("名詞")
verbData = dbhelper.outputWord("動詞")
adjectiveData = dbhelper.outputWord("形容詞")
newWordData = dbhelper.outputWord("オリジナル")
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")
cell.backgroundColor = UIColor.clearColor()
switch segmentedControl.selectedSegmentIndex {
case 0:
cell.textLabel?.text = nounData[indexPath.row]
case 1:
cell.textLabel?.text = verbData[indexPath.row]
case 2:
cell.textLabel?.text = adjectiveData[indexPath.row]
default:
cell.textLabel?.text = newWordData[indexPath.row]
}
return cell
}