2016-10-30 3 views
2

나는 다소 새로운 swift이고, 수집 한 후 사용자가 저장 한 int 변수를 저장하는 데 도움이 필요합니다. 그래서 앱을 닫은 후에도 저장합니다. 그래서 여기에 내가했던 것입니다. 두 장면 하나는 동전 변수를 가진 구조체를 가진 startMenu를 나타내며 (다른 장면에서 쉽게 제어 할 수 있도록), GameScene 인 다른 장면과 GameScene에서 사용자가 코인 노드와 상호 작용할 때마다 시작 메뉴신속한 동전 저장 3

내 구조체의 StarMenu 장면 여기

에서 동전 변수 여기

struct Variables { 

    static var CoinsCollected = 0 


} 

및 1 내가 수 있도록 한 것입니다 t는

let defaults = UserDefaults.standard 
    defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected") 
    defaults.synchronize() 

를 저장하고 사용자가 동전

Variables.CoinsCollected += 1 

와 상호 작용할 때 나는 나의 didbegin 접촉 내부 GameScene에서이 라인을 가지고 그리고 난

변수 동전의 labelnode을 갱신이 줄을이 수
coinsCollectedLabel = SKLabelNode(text: "coins: \(Variables.CoinsCollected)") 

그리고 모든 것이 잘 작동한다는 점만 제외하면 저장되지 않고 뭔가를 놓치고 동일한 문제로 많은 사람들의 문제를 읽었지만 당신의 어떤 사람이 나를 도울 수 있다면, 그래서 작업 idn't 내가보기 엔 그것이 내가이 전체 변수를 저장하는 가치가있을 것이라고 생각

+2

'CoinsCollected'를 저장하는 코드가 있지만 'UserDefaults'에서 코드를로드 할 수있는 코드가 있습니까? – Danoram

+0

@danorm 나는 나의 질문을 편집하고 나는이 선을 가지고있다. 그러나 그것이 당신이 말하는 것에 대해 확실하지 않다. –

+1

이 답변을 확인하십시오 : http://stackoverflow.com/a/40330947/1689376 – alexburtnik

답변

1
당신의 동전은 항상 영구적 인 파일에 저장됩니다, 그래서 당신은 당신의 Variables 클래스에서이 작업을 수행 할 수 있습니다

:

class Variables { 

    static let userDefaults = UserDefaults.standard 

    struct Constants { 
     static let CoinsCollectedKey = "CoinsCollected" 
    } 

    static var CoinsCollected: Int { 
     get { 
      return userDefaults.integer(forKey: self.Constants.CoinsCollectedKey) 
     } 

     set(value) { 
      userDefaults.setValue(value, forKey: self.Constants.CoinsCollectedKey) 
     } 
    } 
} 
+0

도움을 주셔서 대단히 감사합니다 !! –

1
let defaults = UserDefaults.standard 

... 
//after Initializing Variables Instance 

//get saved value 
guard Variables.CoinsCollected = defaults.integer(forKey: "CoinsCollected") else { 
    print("Previously saved coins don't exist") 

    //create UserDefaults value for coins 
    defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected") 
} 

이 대신 개체를 감사 할 것이다 당신은 당신이 추가 한 새 값을 얻을 수 있도록 나중에 struct에 -이 경우에는 (예를 들어)를 사용하여 Variables 객체를 직렬화한다

//set object 
defaults.set(Variables, forKey: "Variables") 
//read object 
let variables: Variables = defaults.object(forKey: "Variables") 

//theoretically you should now be able to get CoinsCollected value within your retrieved object~ 
//e.g. 
print(variables.CoinsCollected) 
+0

에 대해 [didSet] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html)을 쓰는 것이 좋습니다. 도움을 주셔서 대단히 감사합니다 !! –

+0

문제는 없습니다 ~ @ mrosoaie의 답변이 제 것보다 낫고 영리하다고 생각합니다. 행운을 빕니다! – Danoram