iOS 응용 프로그램을 obj-c에서 swift로 변환해야합니다. 30 초마다 shoutcast에서 메타 데이터를로드하는 ViewController
에 NStimer
이 있지만 응용 프로그램이 사임 할 때 중지됩니다. 포어 그라운드로 들어가면 다시 실행됩니다.Swift에서는 응용 프로그램을 백그라운드로 실행할 때 AppDelegate에서 NSTimer를 어떻게 easival하는가?
편집 : 확인. 문제 해결됨! 나는 다음과 같은 이름 UIApplicationWillResignActiveNotification
및 UIApplicationWillEnterForegroundNotification
에있는 viewDidLoad 두 관찰자를 추가 :
override func viewDidLoad() {
NSLog("System Version is \(UIDevice.currentDevice().systemVersion)");
super.viewDidLoad()
self.runTimer()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "invalidateTimer", name: UIApplicationWillResignActiveNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "runTimer", name: UIApplicationWillEnterForegroundNotification, object: nil)
}
나는 두 가지 기능을했다. 실행 타이머에 대한 첫 번째 :
func runTimer(){
loadMetadata()
myTimer.invalidate()
NSLog("timer run");
myTimer = NSTimer.scheduledTimerWithTimeInterval(30.0, target: self, selector: "loadMetadata", userInfo: nil, repeats: true)
let mainLoop = NSRunLoop.mainRunLoop()
mainLoop.addTimer(myTimer, forMode: NSDefaultRunLoopMode)
}
및 제 2 그것을 막을 :
func invalidateTimer(){
myTimer.invalidate()
NSLog("timer invalidated %u", myTimer);
}
내가이 사람을 도울 수 있기를 바랍니다. :) 내가 제안
는 objC 이미 깨진 - 당신도 objC 깨진 ins't –
을하고 싶은 것입니다 그것을 할, 그것을 작동합니다. 나는 타이머를위한 코드만을 보여 주었고, 메소드'loadMetadata' 없이는 타이머를위한 선택자이고 나머지 프로젝트는 없었다. :) –
문제가 해결되었습니다! 첫 번째 게시물의 하단을보십시오. :) –