【发布时间】:2017-10-27 23:52:44
【问题描述】:
我正在制作一个应用程序,用户可以从 3 个不同的数组中进行选择,这些数组会更改下一页上某些 UI 按钮内的文本。我构建了一个应用程序的粗略演示,将数组硬编码到视图控制器,根本没有真正使用模型。现在我已经从视图控制器中取出所有功能并将其放入一个单独的类cardDatabase。
下面是cardDatabase 类。
class cardDatabase {
public func updateCardSelection(cardSet: Int){
print("updateCardSelection called")
switch cardSet {
case 0:
selectedCardArray = cardSetOne
selectedCardNum = 0
case 1:
selectedCardArray = cardSetTwo
selectedCardNum = 1
case 2:
selectedCardArray = cardSetThree
selectedCardNum = 2
default:
print("Debug Error - Card set not recognised")
}
print(selectedCardNum)
}
public var selectedCardNum: Int!
public var selectedCardArray: Array<String>!
//Create arrays for each card dataset
public let cardSetOne = [
"Word 1",
"Word 2",
"Word 3",
"Word 4",
"Word 5",
"Word 6",
"Word 7",
"Word 8",
"Word 9"
]
public let cardSetTwo = [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
]
public let cardSetThree = [
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i"
]
}
如您所见,有 3 个数组填充了不同的单词,它们将显示在另一个屏幕上。我正在努力让我的数据库实际存储任何数据。当我移动到显示数组的屏幕时,我不是直接从数据库中提取信息,而是通过 segue 发送信息。
我设想数据库充当应用程序的模型,控制器可以从模型中提取信息并将其显示在视图中。相反,每次我推送一个新视图时,数据库中的值都会设置为 nil,从而使数据库实际上毫无用处!
下面我已经包含了初始视图的代码。这真的让我很烦,因为我发誓我在以前的应用程序中使用了一个独立的类来存储变量,我从来没有遇到过这个问题!
import Foundation
import UIKit
var firstLoad = true
class MainMenuVC: UIViewController {
var cardEngine: cardDatabase!
override func viewDidLoad() {
super.viewDidLoad()
cardEngine = cardDatabase()
if firstLoad == true {
cardEngine.selectedCardArray = cardEngine.cardSetOne
cardEngine.selectedCardNum = 0
firstLoad = false
}
print("selected cardNum = \(cardEngine.selectedCardNum), sender MainMenuVC")
cardSelector.selectedSegmentIndex = cardEngine.selectedCardNum
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Present Card Selection" {
let destinationVC = (segue.destination as! CardSelectionVC)
destinationVC.cardList = cardEngine.selectedCardArray
}
}
@IBOutlet weak var cardSelector: UISegmentedControl!
@IBAction func cardSetSelected(_ sender: UISegmentedControl) {
cardEngine.updateCardSelection(cardSet: sender.selectedSegmentIndex)
}
}
【问题讨论】:
-
您能否说明您尝试访问卡数据库的位置,即值为零。我不确定我是否完全理解这个问题。您是从 MainMenuVC 推送视图并始终使用相同的
cardEngine,还是每次都以某种方式创建新的 cardDatabases?您包含的代码没有显示