我刚刚开始iOS开发,我很想知道视图和视图控制器的正确实现是什么。
例如,我用UIImageView和UITapGestureRecognizer做了一个简单的TicTacToe游戏。我使用了一个outlet集合数组,然后为每个添加了手势识别器。我理解为什么这个简单的跟随MVC并不重要,但我想正确地学习它。这些出口在技术上应该在视图中,我将UIGestureRecognizers添加到视图中的每个,目标对象是我的ViewController,而动作是我的ViewController中的一个函数。但是,当我这样做时,程序崩溃了。
此版本只为触摸的UIImage添加了一个x:
import UIKit
class TTTView: UIView {
@IBOutlet weak var display: UILabel! {
didSet {
// add gesture recognizers to all spots on board
for index in 0..<board.count {
let gestureRecognizer = UITapGestureRecognizer(target: "ViewController", action: "spotPressed:")
board[index].addGestureRecognizer(gestureRecognizer)
}
}
}
@IBOutlet var board: [UIImageView]!
}
和我的ViewController:
import UIKit
class ViewController: UIViewController {
var x = UIImage(named: "x")
// executed when spot is tapped
func spotPressed(recognizer: UITapGestureRecognizer) {
let fieldTapped = recognizer.view as UIImageView
fieldTapped.image = x // implement with protocol
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
}
此代码因错误而崩溃:
2015-04-02 11:17:41.761 TTTv4[11273:356731] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<TTTv4.ViewController 0x7fc7d3f0e210> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key board.
任何人都可以帮我理解这里发生了什么吗?
这与链接的答案完全不同。这是在Swift中,错误来自于一个完全不同的函数,恰好试图访问不同的视图控制器。