Я создаю приложение, которое, написав строку в текстовом поле, сохраняет ее в массиве. Массив показан в таблицеViewController, встроенном в mainViewController. Ситуация такова. http://i.stack.imgur.com/z5uTc.png. Я хочу, чтобы каждый раз, когда я нажимаю зеленую кнопку «Сохранить», строка, которую я написал в текстовом поле, сохраняется и отображается в таблицеView, а textField возвращает пустой, поэтому я могу переписать строку, которая добавляется в массив , TableView, в этом случае, показывает две строки, которые я написал в том же текстовом поле. Я попытался написать код для двух viewControllers (mainViewVC и tableVC).Сохранить строку текстового поля в массиве - Swift
MainVC
import UIKit
class mainVC: UIViewController {
@IBOutlet var txtField: UITextField!
var embTableVC: tableVC!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "embededTableVC" {
embTableVC = segue.destinationViewController as! tableVC
}
}
@IBAction func Save() {
if let Text = txtField.text {
if txtField.text == "" {
myArray.append(Text)
let row = myArray.count-1
let indexPath = NSIndexPath(forRow: row, inSection: 0)
embTableVC.myTableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
txtField.text = ""
txtField.resignFirstResponder()
}
}
TableVC
import UIKit
var myArray = [String]()
class tableVC: UITableViewController {
@IBOutlet var myTableView: UITableView! {
didSet {
myTableView.dataSource = self
myTableView.delegate = self
}
}
override func viewDidLoad() {
super.viewDidLoad()
myTableView.dataSource = self
myTableView.delegate = self
myTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "customcell")
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
myTableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myArray.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = myTableView.dequeueReusableCellWithIdentifier("customcell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = myArray[indexPath.item]
return cell
}
Код я написал не работает. Я могу скомпилировать и запустить приложение на своем устройстве, но когда я нажимаю зеленую кнопку «Сохранить», приложение падает. Сообщение об ошибке является «фатальной ошибкой: неожиданно обнаружено нуль при разворачивании необязательного значения» в строке: embTableVC.myTableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
в «Сохранить» IBAction. Вы можете мне помочь? Спасибо большое :)
Итак, что случилось в моем коде? Что мне делать? Я отредактировал код tableVC –
Создайте массив как свойство в TableVC и передайте массив, сделанный в MainVC, в метод prepareForSegue MainVC. – Skywalker
С функцией «Сохранить» у меня нет проблем с кодом. С prepareForSegue я не могу написать 'embTableVC.myArray = myArray', потому что он говорит:« Нет члена myArray в embTableVC ». –