Я пытался использовать UserDefaults для оценки, чтобы не обнулять каждый раз, когда он открывается, но это не работает - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь создать валютную систему в приложении в своей игре.Чтобы сделать это, я попытался использовать UserDefaults, чтобы указанная валюта не сбрасывалась в ноль каждый раз, когда я закрываю приложение и открываю заново или переключаюсь на другой viewController и переключаюсь обратно.Тем не менее, это не похоже на работу.Может кто-нибудь подскажите, пожалуйста, что я делаю не так?

Вот мой код:

var notesScore = 0

@IBAction func IncreaseNotes(_ sender: UIButton)
{
    notesScore = notesScore + 1
    notesLabel.text = String(notesScore)
}

override func viewDidLoad()
{
    super.viewDidLoad()

    view.backgroundColor = colors.themeBlue
    notesLabel.textColor = colors.white

    var notesScoreDefault = UserDefaults.standard

    if (notesScoreDefault.value(forKey: "notesScore")  != nil)
    {
        notesScore = notesScoreDefault.value(forKey: "notesScore") as! NSInteger
        notesLabel.text = NSString(format: "Notes: %i", notesScore) as String
    }

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Поэтому я бы порекомендовал вам написать класс UserdefaultsHelper.swift, в котором вы сохраните все свои пользовательские ошибки и сможете отслеживать их.

Это должно выглядеть, например, примерно так:

import UIKit
import Foundation

class UserDefaultsHelper {

    static var notesScore: Int? {
        get {
            return UserDefaults.standard.object(forKey: "notesScore") as? Int
        }
        set {
            UserDefaults.standard.set(newValue, forKey: "notesScore")
        }
    }
}

После этого в любом месте вашего приложения вы можете получить доступ к этому значению, просто позвонив по телефону:

UserDefaultsHelper.notesScore

Это необязательно, поэтому в следующий раз, когда вам это нужно, и, возможно, даже не уверены, существует ли оно, вы можете вызватьviewDidLoad для примера:

override func viewDidLoad() {
    super.viewDidLoad()
    if let notesScore = UserDefaultsHelper.notesScore {
        // Do what you want with it here
    }
}

И затем добавьте что-нибудь к нему или сделайте, что вы хотите.Например, я храню идентификаторы пользователей или pushTokens.Для будущих Userdefaults вы можете просто добавить его в UserdefaultsHelper.swift

Редактировать: Пример

Относительно вашего вопроса в комментариях.Если вы хотите увеличить его на 5. Вы можете сделать это следующим образом:

if let existingNotesScore = UserDefaultsHelper.notesScore {
    UserDefaultsHelper.notesScore = existingNotesScore + 5
}

Объяснение: С помощью команды «if let» вы можете безопасно проверить, есть ли что-то, сохраненное в Userdefaults в переменной notesScore, еслида, он идет внутри {}, и вы можете получить доступ к значению в существующихNotesScore.Затем вы просто переопределяете значение в Userdefaults с существующим + 5

0 голосов
/ 25 ноября 2018

Вы должны хранить счет, когда он изменяется.Например, когда вы увеличиваете счет, вы можете сохранить его в userdefaults.

@IBAction func IncreaseNotes(_ sender: UIButton) {
    notesScore = notesScore + 1
    notesLabel.text = String(notesScore)
    // Saving score.
    UserDefaults.standard.set(self.notesScore, forKey: "notesScore")
}

Теперь в viewDidLoad вы можете получить этот счет, как показано ниже,

let score = UserDefaults.standard.integer(forKey: "notesScore")
notesLabel.text = String(score)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...