Я делаю приложение для тестирования рефлекса, где один экран является игрой, и если вы нажмете кнопку, вы можете переходить на другой экран, который содержит табло в виде таблицы. Я сначала привязал второе представление ко второму UIViewController
с использованием какао-touch, но проблема была в том, что я не мог получить доступ к какой-либо из переменных или данных в первом UIViewController
, и это было важно (потому что таблица должна перезагрузить свои данные из сначала UIViewController
). Затем я попытался сделать второй UIViewController
подкласс первого UIViewController
(и я столкнулся с проблемами), поэтому я отказался от этой идеи. Теперь, когда оба представления подключены к одному UIViewController
, я столкнулся с несколькими проблемами. Во-первых, при попытке выполнить функции и изменить значения данных, которые не присутствуют на экране (IE: перезагрузка данных таблицы в представлении загрузилась, что приводит к ошибке, поскольку таблица не присутствовала на экране). Есть ли какие-либо решения для этого, и есть ли способ связать все данные в одном контроллере представления с другим? Спасибо. Вот код (это в 1 UIViewController
)Основная проблема со ссылкой 2 вида для просмотра контроллера
import UIKit
class ViewController: UIViewController, UITableViewDelegate {
var arr = [Int]()
var timer = NSTimer()
var countdowntimer = NSTimer()
var count = 0
var countdown = Int(arc4random_uniform(4000) + 1000)
var highscore:Int!
var buttonTapCounter:Int!
let dateFormatter = NSDateFormatter()
@IBOutlet weak var beginButton: UIButton!
@IBOutlet weak var table: UITableView!
@IBOutlet weak var resetDataButton: UIButton!
@IBOutlet weak var averageLabel: UILabel!
@IBOutlet weak var bestLabel: UILabel!
@IBOutlet weak var startButton: UILabel!
@IBOutlet weak var highScoreButton: UILabel!
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var backgroundImage: UIImageView!
func updateTime() {
countdown = countdown - 1
if countdown <= 0 {
startButton.textColor = UIColor.blackColor()
startButton.text = "Tap Now!"
countdowntimer.invalidate()
backgroundImage.image = UIImage(named: "red")
count = 0
Timer()
}
}
func Timer() {
timer = NSTimer.scheduledTimerWithTimeInterval(0.001, target:self, selector:Selector("reflexTest"), userInfo:nil, repeats: true)
}
func reflexTest() {
count = count + 1
timerLabel.text = "\(count) ms"
}
@IBAction func returnPressed(sender: AnyObject) {
buttonTapCounter = 0
}
@IBAction func scoreButtonTouched(sender: AnyObject) {
table.reloadData()
}
@IBAction func beginTapped(sender: AnyObject) {
if startButton.text == "Tap when the Color Changes" {
startButton.text = "You tapped too early!"
countdowntimer.invalidate()
countdown = Int(arc4random_uniform(4000) + 1000)
} else {
if count == 0 {
countdowntimer = NSTimer.scheduledTimerWithTimeInterval(0.001, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true)
startButton.text = "Tap when the Color Changes"
countdown = Int(arc4random_uniform(4000) + 1000)
timerLabel.text = "\(count) ms"
} else {
timer.invalidate()
backgroundImage.image = UIImage(named: "green")
startButton.text = "Tap to Begin"
arr.append(count)
count = 0
highscore = minElement(arr)
highScoreButton.text = "Best: \(highscore) ms"
saveDefaults()
loadDefaults()
}
}
}
func loadDefaults() {
if let savedArray = NSUserDefaults.standardUserDefaults().objectForKey("data") as? [Int] {
self.arr = savedArray
}
}
func saveDefaults() {
NSUserDefaults.standardUserDefaults().setObject(self.arr, forKey: "data")
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arr.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
dateFormatter.dateFormat = "MM/dd/yy HH:mm"
let dateInFormat = dateFormatter.stringFromDate(NSDate())
let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
cell.textLabel?.text = String(arr[indexPath.row])
return cell
}
func highScoreButtonText() {
//highScoreButton.text = "Best: \(highscore) ms"
}
override func viewDidLoad() {
super.viewDidLoad()
loadDefaults()
highscore = minElement(arr)
highScoreButtonText()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Проблематика код находится в viewDidLoad, и всякий раз, когда я перезагрузить данные. Это в основном из-за того, что есть 2 взгляда. Я знаю, что я должен создать 2 отдельных контроллера представлений, но есть ли способ связать все данные между ними? Благодарю.