ios - 应用程序仅在我关闭并重新打开时更新
问题描述
我正在尝试构建一个 IOS 应用程序,用户将选项放入 tableview 中,然后选项出现并且纺纱机旋转并在随机点停止。我已将所有必要的代码放在 ViewWillAppear 中,但由于某种原因,应用程序不会使用用户默认值进行更新,只有当我关闭应用程序并重新打开它时。它确实在某一时刻确实有效,但后来停止了,我不知道如何修复它。我正在使用 TTFortuneWheel Pod。
如果有人想查看完整代码,我将链接我的 GitHub。 https://github.com/jamesnjones/Just.Decide
下面是主屏幕的代码
import UIKit
import TTFortuneWheel
import AVFoundation
class ViewController: UIViewController, UINavigationControllerDelegate {
@IBOutlet weak var spinningWheel: TTFortuneWheel!
@IBOutlet weak var ResultsLabel: UILabel!
let transition = SlideInTransition()
var slices : [CarnivalWheel] = []
var result: String?
var player: AVAudioPlayer!
var soundIsOn = true
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.delegate = self
spinningWheel.initialDrawingOffset = 270.0
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("check")
slices = getSlices()
spinningWheel.slices = slices
spinningWheel.equalSlices = true
spinningWheel.frameStroke.width = 0
spinningWheel.titleRotation = CGFloat.pi
spinningWheel.slices.enumerated().forEach { (pair) in
let slice = pair.element as! CarnivalWheel
let offset = pair.offset
switch offset % 6 {
case 0: slice.style = .blue
case 1: slice.style = .green
case 2: slice.style = .grey
case 3: slice.style = .orange
case 4: slice.style = .purple
default: slice.style = .yellow
}
}
}
private func getSlices() -> [CarnivalWheel] {
PersistenceManager.retrieveSlices { [weak self] result in
guard let self = self else {return}
switch result {
case .success(let slices):
if slices.isEmpty {
print("this is where i will add an alert or sumin")
}else {
self.slices = slices
DispatchQueue.main.async {
self.reloadInputViews()
}
}
case .failure(let error):
print("Edit VC Errror ")
}
}
return slices
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
true
}
func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
true
}
@IBAction func rotateButton(_ sender: UIButton) {
if soundIsOn {
playSound(soundName: "spinning")
ResultsLabel.text = ""
let randomNumber = Int.random(in: 0...slices.count - 1)
spinningWheel.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + 0) {
self.spinningWheel.startAnimating(fininshIndex: randomNumber) { (finished) in
self.ResultsLabel.text = self.spinningWheel.slices[randomNumber].title
}
}
} else {
ResultsLabel.text = ""
let randomNumber = Int.random(in: 0...slices.count - 1)
spinningWheel.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + 0) {
self.spinningWheel.startAnimating(fininshIndex: randomNumber) { (finished) in
self.ResultsLabel.text = self.spinningWheel.slices[randomNumber].title
}
}
}
}
解决方案
与其把它放在你的 viewWillAppear 里面,不如把它放在 viewDidAppear 里面:
override func viewDidAppear(_ animated: Bool) {
<#code#>
}
推荐阅读
- angular - 'ng g c' 不工作(Angular+NativeScript)
- azure - Azure 函数 - 与文件相关的无法解释的存储帐户成本
- bash - 在 Unix 中的一个非常大的文件 (5GB) 中删除每行末尾的逗号
- python - 使用python将.xlsx转换为.txt?或格式化 .txt 文件以修复列缩进?
- android - 使用 androidx DialogFragment 创建 AlertDialog 时按钮样式错误
- javascript - 创建实例时在构造函数中声明变量而不赋值
- android - 有没有办法从 Dao 访问我的 Entity 的属性?(房间)
- javascript - 如何在 nginx 中设置 2 个项目网站 [im using nuxt run diffent port]
- javascript - 将菜单添加到 Greasemonkey 脚本的最佳方法
- javascript - 当我尝试下载 pdf 时,我在屏幕上看不到,屏幕变灰并且没有显示任何内容。我该如何解决?