1

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 を介してパラメーターを渡そうとしましたが、結果は同じです。ライフサイクルに問題があると思います。

何か案は?

4

2 に答える 2

1

NSUserDefaults はフラッシュにデータを書き込みますが、それほど高速ではない可能性があります。

UIApplicationDidBecomeActiveNotification以外の観察のように、もう少し待つことができますUIApplicationWillEnterForegroundNotification

または、他の方法を使用して params を渡すこともできます。たとえば、 のインスタンス変数として使用できますAppDelegate

于 2015-10-05T14:38:23.733 に答える