我正在製作一個反射測試應用程序,其中一個屏幕是遊戲,如果按下按鈕,則可以插入另一個屏幕,該屏幕包含作爲表格視圖的記分板。我最初使用cocoa touch將第二個視圖附加到第二個視圖UIViewController
,但問題是,我無法訪問第一個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個獨立的視圖控制器,但有沒有辦法鏈接它們之間的所有數據?謝謝。