最佳暂存措施
Best temporary storage measure
我正在开发一个应用程序,我需要在视图控制器之间移动很多时间,主要是进行循环,但现在我必须存储一些数据(简单变量和数组)。
我目前将它们存储在应用程序委托中,但我不知道这是否是个好主意。我在网上看过,但我真的不知道什么是最适合我的解决方案。
这就是我的设置方式:
Appdelegate:
var aantalSpelers: Int!
var namenSpelers = [String]()
var youself = KaartenSpeler()
var player2 = KaartenSpeler()
var player3 = KaartenSpeler()
var player4 = KaartenSpeler()
var player5 = KaartenSpeler()
var player6 = KaartenSpeler()
var Vragen = [[0,0,0,0,0,5]]
var VragenOnbekend = [[6,0,0,0,0,0]]
var VragenInformatie = [[["Spelletjeskamer",""],["Keuken",""],["Garage",""],["Binnenplaats",""],["Zitkamer",""],["Slaapkamer",""],["Studeerkamer",""],["Eetkamer",""],["Badkamer",""]], [["De Wit",""],["Pimpel",""],["Blaauw van Draet",""],["Roodhart",""],["Groenewoud",""],["Van Geelen",""]], [["Loden pijp",""],["Pistool",""],["Engelse sleutel",""],["Dolk",""],["Touw",""],["Kandelaar",""]]]
var EersteKeerMainScreen = true
并在 VC 中:
func Appdelegate() -> AppDelegate {
return UIApplication.sharedApplication().delegate as! AppDelegate
}
let sections = ["Locaties","Personages","Wapens"]
var aantalSpelers: Int!
var namenSpelers = [String]()
var eersteKaarten = [[Int(),Int()]]
var youself: KaartenSpeler!
var player2: KaartenSpeler!
var player3: KaartenSpeler!
var player4: KaartenSpeler!
var player5: KaartenSpeler!
var player6: KaartenSpeler!
//vraag is: [numberVrager,numerGevraagde,numerLocatie,numerPersonage,numerWapen,0=lietgeenkaartzien - 1=locatie, - 2=personage - 3=wapen - 4=onbekend]
var Vragen = [[]]
var VragenOnbekend = [[]]
var VragenInformatie = []
var EersteKeerMainScreen = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//Get information back from appdelegate
aantalSpelers = Appdelegate().aantalSpelers
namenSpelers = Appdelegate().namenSpelers
youself = Appdelegate().youself
player2 = Appdelegate().player2
player3 = Appdelegate().player3
player4 = Appdelegate().player4
player5 = Appdelegate().player5
player6 = Appdelegate().player6
Vragen = Appdelegate().Vragen
VragenOnbekend = Appdelegate().VragenOnbekend
VragenInformatie = Appdelegate().VragenInformatie
EersteKeerMainScreen = Appdelegate().EersteKeerMainScreen
这实际上是一个可行的选择吗?
P.S。抱歉我的英语不好
在这种情况下,我将使用的方法(可能不是最好的)是通过使用 self.performSegueWithIdentifier("segueTitle", sender) 使用 segues 将变量传递给您。
然后你可以在 prepareForSegue 中实际处理你从这个 VC 移动到另一个 VC 的 objects。
例如
/*Global Variable is numbersArray*/
var numbersArray: [String] = []
并且每当您完成为视图控制器编写逻辑时,请使用:
self.performSegueWithIdentifier("segueTitle", sender: self)
现在处理您想传递给下一个 VC 的内容,添加:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "segueTitle") {
// pass data to next view
let destinationVC = segue.destinationViewController as! YourNextViewController
destinationVC.numbersArray = self.numbersArray;
}
}
要记住的是,您必须在 next VC 中使用相同的全局变量,正如您在上例中看到的,我们将 current 分配给 next。还要确保通过 Storyboard 创建并连接了 segue,并将 segueTitle 替换为给定的标题。
更新:例如转班
class TranferClass {
var numbersArray:[String] = []
}
然后实例化这个class并发送给下一个VC.Eg.:
在 VC 1:
/*in global scope*/
var transferObject = TransferClass()
在同一个VC中,设置数组例如:
self.transferObject.numbersArray[0] = "Hello"
然后触发转场:
self.performSegueWithIdentifier(...)
然后处理传球:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "segueTitle") {
// pass data to next view
let destinationVC = segue.destinationViewController as! YourNextViewController
destinationVC.transferObject = self.transferObject;
}
}
您最初的想法是您可能不应该将这些存储在 AppDelegate 中。我建议创建一个新的 class 或一个可以保存这些值的结构。
但我注意到的另一件事是,您已经为 KaartenSpeler
单独设置了一个 class,因此您一定要注意保留周期并确保这些 classes不要互相强烈引用。
我正在开发一个应用程序,我需要在视图控制器之间移动很多时间,主要是进行循环,但现在我必须存储一些数据(简单变量和数组)。
我目前将它们存储在应用程序委托中,但我不知道这是否是个好主意。我在网上看过,但我真的不知道什么是最适合我的解决方案。
这就是我的设置方式:
Appdelegate:
var aantalSpelers: Int!
var namenSpelers = [String]()
var youself = KaartenSpeler()
var player2 = KaartenSpeler()
var player3 = KaartenSpeler()
var player4 = KaartenSpeler()
var player5 = KaartenSpeler()
var player6 = KaartenSpeler()
var Vragen = [[0,0,0,0,0,5]]
var VragenOnbekend = [[6,0,0,0,0,0]]
var VragenInformatie = [[["Spelletjeskamer",""],["Keuken",""],["Garage",""],["Binnenplaats",""],["Zitkamer",""],["Slaapkamer",""],["Studeerkamer",""],["Eetkamer",""],["Badkamer",""]], [["De Wit",""],["Pimpel",""],["Blaauw van Draet",""],["Roodhart",""],["Groenewoud",""],["Van Geelen",""]], [["Loden pijp",""],["Pistool",""],["Engelse sleutel",""],["Dolk",""],["Touw",""],["Kandelaar",""]]]
var EersteKeerMainScreen = true
并在 VC 中:
func Appdelegate() -> AppDelegate {
return UIApplication.sharedApplication().delegate as! AppDelegate
}
let sections = ["Locaties","Personages","Wapens"]
var aantalSpelers: Int!
var namenSpelers = [String]()
var eersteKaarten = [[Int(),Int()]]
var youself: KaartenSpeler!
var player2: KaartenSpeler!
var player3: KaartenSpeler!
var player4: KaartenSpeler!
var player5: KaartenSpeler!
var player6: KaartenSpeler!
//vraag is: [numberVrager,numerGevraagde,numerLocatie,numerPersonage,numerWapen,0=lietgeenkaartzien - 1=locatie, - 2=personage - 3=wapen - 4=onbekend]
var Vragen = [[]]
var VragenOnbekend = [[]]
var VragenInformatie = []
var EersteKeerMainScreen = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//Get information back from appdelegate
aantalSpelers = Appdelegate().aantalSpelers
namenSpelers = Appdelegate().namenSpelers
youself = Appdelegate().youself
player2 = Appdelegate().player2
player3 = Appdelegate().player3
player4 = Appdelegate().player4
player5 = Appdelegate().player5
player6 = Appdelegate().player6
Vragen = Appdelegate().Vragen
VragenOnbekend = Appdelegate().VragenOnbekend
VragenInformatie = Appdelegate().VragenInformatie
EersteKeerMainScreen = Appdelegate().EersteKeerMainScreen
这实际上是一个可行的选择吗?
P.S。抱歉我的英语不好
在这种情况下,我将使用的方法(可能不是最好的)是通过使用 self.performSegueWithIdentifier("segueTitle", sender) 使用 segues 将变量传递给您。
然后你可以在 prepareForSegue 中实际处理你从这个 VC 移动到另一个 VC 的 objects。
例如
/*Global Variable is numbersArray*/
var numbersArray: [String] = []
并且每当您完成为视图控制器编写逻辑时,请使用:
self.performSegueWithIdentifier("segueTitle", sender: self)
现在处理您想传递给下一个 VC 的内容,添加:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "segueTitle") {
// pass data to next view
let destinationVC = segue.destinationViewController as! YourNextViewController
destinationVC.numbersArray = self.numbersArray;
}
}
要记住的是,您必须在 next VC 中使用相同的全局变量,正如您在上例中看到的,我们将 current 分配给 next。还要确保通过 Storyboard 创建并连接了 segue,并将 segueTitle 替换为给定的标题。
更新:例如转班
class TranferClass {
var numbersArray:[String] = []
}
然后实例化这个class并发送给下一个VC.Eg.:
在 VC 1:
/*in global scope*/
var transferObject = TransferClass()
在同一个VC中,设置数组例如:
self.transferObject.numbersArray[0] = "Hello"
然后触发转场:
self.performSegueWithIdentifier(...)
然后处理传球:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "segueTitle") {
// pass data to next view
let destinationVC = segue.destinationViewController as! YourNextViewController
destinationVC.transferObject = self.transferObject;
}
}
您最初的想法是您可能不应该将这些存储在 AppDelegate 中。我建议创建一个新的 class 或一个可以保存这些值的结构。
但我注意到的另一件事是,您已经为 KaartenSpeler
单独设置了一个 class,因此您一定要注意保留周期并确保这些 classes不要互相强烈引用。