저장 방법은 이미 알고 있으며 앱을 열 때 자동으로로드 할 수 있습니다. 그러나 나는 그것을 닫을 때 어떻게 그들을 구할 지 모른다! 나는 지금 버튼을 가지고있다. 하나의 값인 StreakNumber
만 저장하려고합니다. 그러나 내가 시도 할 때마다 나는 실패한다.앱 종료시 데이터 저장하기
응용 프로그램 대리인 인 경우 ViewController.AppSave(ViewController)
이라고 말하면됩니다. 나는 오류 얻을 :
Editor placeholder in source file Expression resolves to an unused function
을 내가 ViewController.AppSave()
를 사용하는 경우 나는 다음과 같은 오류가 발생합니다 :
Instance member 'SaveApp' cannot be used on type 'ViewController'; did you mean to use a value of this type instead?
import UIKit
import UserNotifications
class ViewController: UIViewController {
//TEST PLAY AREA//
@IBAction func SaveButton(_ sender: Any) {
SaveApp()
}
@IBAction func LoadButton(_ sender: Any) {
LoadApp()
}
///TEST PLAY AREA ENDS
public var streakNumber = 0
public var streakNumberString = ""
public var activated = false
let defaults = UserDefaults.standard
//Labels
@IBOutlet var streakNumberLabel: UILabel!
@IBOutlet var remainingTimeTextLabel: UILabel!
@IBOutlet var remainingTimeNumberLabel: UILabel!
//Buttons
@IBAction func startButton(_ sender: Any) {
Activate()
}
@IBAction func stopButton(_ sender: Any) {
Deactivate()
seconds = 59
minutes = 59
hours = 47
}
//Timer
var timer = Timer()
var seconds = 0
var minutes = 0
var hours = 0
// Nitifications
//END
override func viewDidLoad() {
super.viewDidLoad()
LoadApp()
// this enables notifications
UNUserNotificationCenter.current().requestAuthorization(options:[.alert , .sound , .badge], completionHandler:{ didAllow, error in
})
}
func Activate(){
if activated == false {
streakNumber += 1
}
activated = true
streakNumberLabel.text = String(streakNumber)
}
func Deactivate(){
if activated == true{
activated = false
ActivTimer()
// Notification
let content = UNMutableNotificationContent()
content.title = " 10 secodns are up "
content.subtitle = " yep time passed"
content.body = " The 10 seconds are really up!!"
content.badge = 1
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 600, repeats:false)
let request = UNNotificationRequest(identifier: "timerDone", content: content , trigger: trigger)
UNUserNotificationCenter.current().add(request,withCompletionHandler:nil)
}
}
@objc func Clock(){
seconds = seconds-1
if seconds == -1{
seconds = 59
minutes = minutes-1
}
if minutes == -1{
minutes = 59
hours = hours-1
}
remainingTimeNumberLabel.text = (String(hours) + ":" + String(minutes) + ":" + String(seconds))
if seconds == 0 && hours == 0 && minutes == 0 {
timer.invalidate()
}
}
func ActivTimer(){
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.Clock), userInfo: nil, repeats: true)
}//SAVING STUFF DOESNT WORK
//
func SaveApp(){
streakNumberString = String(streakNumber)
defaults.set(streakNumberString, forKey: "streakNumbers")
print("Saved" + String(defaults.integer(forKey: "streakNumbers")))
}
func LoadApp(){
streakNumberString = defaults.string(forKey: "streakNumbers")!
print (defaults.integer(forKey: "streakNumbers"))
streakNumber = Int(streakNumberString)!
streakNumberLabel.text = String(streakNumber)
}//
}
appdidEnterBackground & willEnterforeground가 가장 좋습니다. 살펴보기 1. https://stackoverflow.com/questions/9011868/whats-the-best-way-to-detect-when-the-app-isenterating-the-background-for-my-vie 2. https://stackoverflow.com/questions/9599431/is-there-any-notification-to-get-before-application-did-enter-background 3. https://stackoverflow.com/questions/9039606/refresh- 전경 입력 후 데이터 4. https://stackoverflow.com/questions/10648388/ios-app-applicationwillenterforeground-and-it-stucked-for-a-while –
게시 한 대부분의 코드에는 아무 것도 없습니다. 오류를 일으키는 코드와 관련이 있습니다. 질문을 편집하여 관련 코드를 포함 시키십시오. 문제의 원인이되는 실제 코드를 포함 시키십시오. – rmaddy