Help us understand the problem. What is going on with this article?

[iOS10] Today Extension (Widget)のハマりどころ (iPad)

More than 1 year has passed since last update.

iOS10のToday Extension (Widget)を開発中にハマったところを書きます。

環境

OS: iOS10
デバイス: iPad (iPad Pro 12.9インチを除く)

ウィジェットの配置

iPadで画面をLandscapeにした時、ウィジェットを左列か右列に配置できます。

Simulator Screen Shot 2017.03.12 14.37.37.png

画面をPortraitにしたときは1列になります。
(iPad Pro 12.9インチを除く)

Simulator Screen Shot 2017.03.12 14.39.08.png

ハマりどころ

問題はウィジェットを右列に配置したときで、例えばLandscapeからPortraitに画面を回転したときは、ウィジェットの画面サイズが変化するのではなく、Landscape用ウィジェットが終了しつつ、Portrait用ウィジェットが起動します。

つ・ま・り、Landscapeで表示しているウィジェットとPortraitで表示しているウィジェットは別のインスタンスです。

注釈
  • ウィジェットを左列に配置したときは発生しません。
  • iPad Pro 12.9インチでは、ウィジェットが常に2列なので発生しません。
  • iPhone6Plus系の画面回転では発生しません。

ログ

LandscapeからPortraitにしたとき

Landscape 右列 Portrait
viewWillDisappear
viewDidLoad()
widgetActiveDisplayModeDidChange(_:withMaximumSize:)
widgetPerformUpdate(completionHandler:)
viewDidDisappear
viewWillAppear
deinit
viewDidAppear

問題

「画面の回転ではウィジェットの画面サイズが変わるだけ」という前提でコーディングすると、画面を回転したら初期値が表示される等の現象に見舞われます。

対策

viewWillDisappearでUserDefaultsなどにデータを保存し、もう1つのインスタンスがviewWillAppearで読み出すようにして、データを同期するようにします。
deinitでデータを保存していると、もう1つのインスタンスが既に起動しているので、データが同期できません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした