2017-03-24 7 views
1

앱 상태 보존 및 복원이 내 앱에서 작동합니다. 복원 작업은 CPU를 많이 사용하며 지원되는 가장 오래된 장치에서 응용 프로그램 상태를 복원하는 데 최대 5 초가 걸릴 수 있으므로 응용 프로그램 상태가 복원되는 동안 작업 표시기를 표시하려고합니다.앱 상태가 복원되는 동안 활동 표시기가 표시되지 않습니까?

override public func decodeRestorableStateWithCoder(coder: NSCoder) { 
    showActivityIndicator() 
    //just creates and adds UIActivityIndicatorView to view controller's view 
    ... 
} 

override public func applicationFinishedRestoringState() { 
    hideActivityIndicator() 
} 

I은 ​​또한 애플리케이션 위임에 UIWindow에 추가하는 시도는 :

func application(application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool 
    showActivityIndicator() 
} 

그러나 두 경우

에는 작동 표시가 표시되지 않는 뷰 컨트롤러

제가 시도 복원 . 복원하는 동안 앱의 뷰 상태가 업데이트되지 않는다고 추측합니다.

앱 상태를 복원하는 동안 누군가가 활동 표시기를 표시 할 수 있습니까? 그렇다면 어떻게해야합니까?

답변

0

복원 프로세스가 주 스레드에서 실행되는 경우 활동 표시기가 표시되지 않는 이유가있을 수 있습니다.

백그라운드 스레드에서 복원 프로세스를 실행 해보십시오.

0

상태 복원 중에 상태는 보존 된 상태에서 찍은 UI의 스냅 샷 이미지가 아니라 앱의 뷰입니다. 따라서 활동 표시기를 포함하여 복원 중 뷰를 변경하면 변경 사항이 표시되지 않습니다.

상태 보존 프로세스의 일부로 UIKit은 앱의 사용자 인터페이스를 캡처하여 이미지 파일에 저장합니다. 앱이 다시 실행되면 시스템은 앱의 기본 시작 이미지 대신이 스냅 샷 이미지를 표시하여 앱이 계속 실행되고 있다는 개념을 유지합니다.

(에서 : Documentation for ignoreSnapshotOnNextApplicationLaunch()) 대신

당신이 UIApplicationWillResignActive 통지와 배경으로가는 응용 프로그램을 잡아 그들이 나중에 복원에 나타납니다 스냅 샷에 보존되도록 다음 뷰를 변경할 수 있습니다 . 이는 버튼을 사용 중지하는 것과 같은 작업을 수행 할 때 유용하므로 사용자는 복원하는 동안 앱과 상호 작용할 수 없음을 알 수 있습니다. 그런 다음 앱이 완전히 다시 활성화되면 해당 버튼을 다시 사용하도록 설정합니다. 그러나 여기에 활동 표시기를 추가하면 애니메이션되지 않습니다.

또는 위의 링크 된 ignoreSnapshotOnNextApplicationLaunch()를 사용하여 상태 복원 중 실행 화면을 표시하여 사용자에게 상호 작용할 수 없다는 것을 명확히 할 수 있습니다. 그러면 복원이 완료되었을 때 복원 된보기로 사라집니다.