2014-10-25 2 views
3

iOS 응용 프로그램을 obj-c에서 swift로 변환해야합니다. 30 초마다 shoutcast에서 메타 데이터를로드하는 ViewControllerNStimer이 있지만 응용 프로그램이 사임 할 때 중지됩니다. 포어 그라운드로 들어가면 다시 실행됩니다.Swift에서는 응용 프로그램을 백그라운드로 실행할 때 AppDelegate에서 NSTimer를 어떻게 easival하는가?

편집 : 확인. 문제 해결됨! 나는 다음과 같은 이름 UIApplicationWillResignActiveNotificationUIApplicationWillEnterForegroundNotification에있는 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); 
} 

내가이 사람을 도울 수 있기를 바랍니다. :) 내가 제안

+0

는 objC 이미 깨진 - 당신도 objC 깨진 ins't –

+0

을하고 싶은 것입니다 그것을 할, 그것을 작동합니다. 나는 타이머를위한 코드만을 보여 주었고, 메소드'loadMetadata' 없이는 타이머를위한 선택자이고 나머지 프로젝트는 없었다. :) –

+0

문제가 해결되었습니다! 첫 번째 게시물의 하단을보십시오. :) –

답변

0

당신은 당신의 작업에 적합한 시스템을 사용 : 새로운 콘텐츠를 확인하기 위해 필요 https://developer.apple.com/library/ios/documentation/iphone/conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW56

앱을 주기적으로 깨워하기 위해 시스템을 요청할 수 있습니다 그들이 시작할 수 있도록 작업을 가져 오기 해당 콘텐츠. 이 모드를 지원하려면 Xcode 프로젝트의 Capabilities 탭에서 Background fetch 옵션 을 Background modes 섹션에서 사용하십시오. 좋은 기회가 발생하면 시스템이 깨어 ...

을 (당신은 또한. 앱의 Info.plist 파일에서 가져올 값으로 UIBackgroundModes 키를 포함하여이 지원을 활성화 할 수 있습니다) 또는으로 응용 프로그램 를 시작합니다 배경을 호출하고 응용 프로그램 대리인의 application:performFetchWithCompletionHandler: 메서드를 호출합니다. 해당 방법 을 사용하여 새 콘텐츠를 확인하고 내용이 인 경우 다운로드 작업을 시작하십시오.