iOS 9 のクイック アクション (3D タッチ) の実行を理解しようとしています。
画像に適用する 4 つのフィルターのうちの 1 つをユーザーに選択してもらいたいので、項目 1 を選択すると、フィルターに NSUserDefaults.standardUserDefaults() を設定し、適用されたフィルターで正しい画像を表示します。
AppDelete.swift で:
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
var filterType:Int
switch (shortcutItem.type) {
...set filterType
}
NSUserDefaults.standardUserDefaults().setInteger(filterType, forKey:"filterType")
NSUserDefaults.standardUserDefaults().synchronize()
}
ViewController.swift で:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector:"setDefaultFilter", name: UIApplicationWillEnterForegroundNotification, object:nil) // Handle enter from background
setDefaultFilter()
}
func setDefaultFilter() {
filterType = defaults.integerForKey("filterType")
...
imageView.image = filterImage(defaultImage!, filter:filters[filterType])
}
ただし、メニューからアプリに入ると、常に最後の選択が表示されます (現在の選択ではありません)。項目 1 を選択しても、何も起こりませんでした。アイテム 3 を選択すると、アイテム 1 が表示されます。
また、appDelegate を介してパラメーターを渡そうとしましたが、結果は同じです。ライフサイクルに問題があると思います。
何か案は?