[iOS13] scene(u:willConnectTo:options:)에 대한 옵션과 세션에 대한 NSUserActivity의 차이
입문
scene(_:willConnectTo:options:)
에서 NSUserActivity
장면을 회복하는 과정에 대해 많은 애플의 템플릿은 다음과 같다. func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let userActivity = connectionOptions.userActivities.first ?? session.stateRestorationActivity {
// UIの復元処理を行う
}
}
이때 session
나 connectionOptions
에서 얻은 NSUserActivity
의 차이를 잘 알고 있기 때문에 조사 내용을 총괄하고 싶습니다.길어졌으니 먼저 총결산을 쓰시오.
총결산
scene(_:willConnectTo:options:)
의connectionOptions
는 시스템 측면의 장면을 제작할 때 전송문에 대한 매개 변수 교환에 사용된다.connectionOptions.userActivities
Handoff와 관련된 사용자 활동은 포함되지 않습니다.handoffUserActivityType
유형 정보만 제공합니다.scene(_:willContinueUserActivityWithType:)
라는 전용 위임 방법에 들어갑니다.connectionOptions.userActivities.first
과 session.stateRestorationActivity
모두 같은 사용자 활동이 있을 것이다.WWDC2019-212
먼저 WWDC 2019-212의 미드레인지에서 언급한 부분
ConnectionOptions#userActivities
을 뽑아낸다.WWDC2019-212 Transcript
WWDC2019-212
, "Handoff 또는 기타 시스템 기능을 통한 사용자 활동"입장
connectionOptions.userActivities
그 다음으로 세션이 예약된 stateRestorationActivity
에서 사용자 활동을 가져옵니다.나는 문서로 더욱 상세한 곳을 찾았다.API 문서에서 어떻게
먼저
UIScene.ConnectionOptions
부터 보자.UIKit creates scenes for many reasons. It might do so in response to a Handoff request or a request to open a URL. When there is a specific reason for creating a scene, UIKit fills a UIScene.ConnectionOptions object with the associated data and passes it to your delegate at connection time.
시스템 측면에서 장면을 만들 때, 예를 들어 "Handoff"또는 "URL 열기 요청"등은
UIScene.ConnectionOptions
에 파라미터를 채워서 삭제문에 전달합니다.단, 이 옵션
userActivities
속성에 대한 설명에서UIScene.ConnectionOptions#userActivities
, Handoff의 사용자 활동은 포함되지 않습니다.다음
UIKit delivers only the type of a Handoff interaction in the handoffUserActivityType property. Later, it calls additional methods of the delegate to deliver the NSUserActivity object itself.
, 장면 시작 시
NSUserActivity
의 activityType
유형 정보만 제공합니다.이후 Handoff의 사용자 활동은 다른 위임 방법에 전달됩니다."additional methods of the delegate"와 같은 곳을 찾아보세요.
및 장면 기반 Handoff 사용자 활동에 대한 전용 위임 방법WWDC의 애니메이션에서만 언급된 내용이라면 오해의 소지가 있다.
참고로 응용 단위로 Handoff의 사용자 활동 인수인계를 하는 데는 scene(_:willContinueUserActivityWithType:) 같은 API가 있다.
그러면 결과
connectionOptions.userActivities
속성에는 어떤 사용자 활동이 포함되어 있습니까?You create user activity objects at key moments in your scene's lifetime and register them with the system.
이후 시스템에 대해 명확하게 등록된 사용자 활동인 것 같습니다.이 등록에 사용할 API는 무엇입니까?이것은
UISceneDelegate#stateRestorationActivity(for:)
에 기재되어 있다.그리고 이 stateRestorationActivity(for:)를 통해 전달된 사용자 활동은 위임된
scene(_:willConnectTo:options:)
의 connectionOptions
매개 변수에 들어갑니다.나는 반드시
stateRestorationActivity(for:)
저장된 사용자 활동이 API의 명칭에 있어서 쌍을 이루는 것이라고 생각한다. 그러면 session.stateRestorationActivity
안에 무엇을 넣을까?문서에서 응용 프로그램이 끊어질 때 시스템에서 제공하는 NSUserActivity를 삭제하여 다시 연결할 때 이 속성으로 복사합니다.
UISceneDelegate는 NSUserActivity를 시스템에 제공
Returns a user activity object encapsulating the current state of the specified scene.
session.stateRestorationActivity
.애플의 템플릿 설치 중 func stateRestorationActivity(for scene: UIScene) -> NSUserActivity? {
return scene.userActivity
}
의 양곡 탄젠트 값입니다.이 경우 stateRestorationActivity(for:)
과 connectionOptions.userActivities.first
모두 같은 사용자 활동을 할 수 있다는 것이다.확실히 다음 프로젝트에서 소개된 애플의 샘플 코드에서 검증된 느낌은 이렇다.
UISceneDelegate
장면의 사용자 활동을 저장하는 방법
예시 코드에 저장된 사용자 활동의 패턴을 설명합니다.
모드1
특정 ViewController에서
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
view.window?.windowScene?.userActivity = photo?.openDetailUserActivity
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
view.window?.windowScene?.userActivity = nil
}
모드2Sample Code - Supporting Multiple Windows on iPad
UISceneDelegate에서
// シーンが非アクティブになる時に呼ばれます
func sceneWillResignActive(_ scene: UIScene) {
if let navController = window!.rootViewController as? UINavigationController {
if let detailViewController = navController.viewControllers.last as? DetailViewController {
// Fetch the user activity from our detail view controller so restore for later.
scene.userActivity = detailViewController.detailUserActivity
}
}
}
언제든지session.stateRestorationActivity
대상의 scene
속성에 사용자 활동을 추가합니다.배치된 사용자 활동의 치수는 다음 라우터를 통해 시스템 측에 전달되는 치수입니다. func stateRestorationActivity(for scene: UIScene) -> NSUserActivity? {
return scene.userActivity
}
이상, 반환SampleCode - Restoring Your App’s State
Reference
이 문제에 관하여([iOS13] scene(u:willConnectTo:options:)에 대한 옵션과 세션에 대한 NSUserActivity의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/snoozelag/items/1cdea93ef1f184336ca6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)