首页 > 解决方案 > 应用程序仅在我关闭并重新打开时更新

问题描述

我正在尝试构建一个 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
                
                }
            }
        
        }
    }

标签: iosswiftiphonepersistenceuserdefaults

解决方案


与其把它放在你的 viewWillAppear 里面,不如把它放在 viewDidAppear 里面:

override func viewDidAppear(_ animated: Bool) {
        <#code#>
    }

推荐阅读