問題タブ [intents-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2736 参照

swift - コア データ ストアがバックグラウンド拡張機能から更新された場合、SwiftUI ビューを更新するにはどうすればよいですか?

インテント拡張ターゲットを持つ SwiftUI アプリがあります。また、共有アプリ グループに配置されたコア データ ストアもあります。

newBackgroundContext()インテント拡張機能は、ショートカット アプリで使用してストアにデータを正常に書き込むことができます。私のSwiftUIアプリは、アプリグループからデータを読み取ることができますが、アプリviewContextを強制終了して再度開いた場合のみです。

別のコンテキストで更新されたことをアプリに知らせる方法が必要だと思いますが、それを行う方法がわかりません。

context.automaticallyMergesChangesFromParent = trueアプリデリゲートで設定してSwiftUIビューに追加しようとcontext.refreshAllObjects()onAppearましたが、違いはないようです。

mergeChanges(fromContextDidSave:)は有望なようですが、通知を取得する方法がわかりません。

私はCore Dataを初めて使用し、非常に混乱しているため、正しい方向へのポインタは素晴らしいでしょう、ありがとう!

これが私の現在のコードのサニタイズされたバージョンです:

アプリ デリゲート

シーンデリゲート

スウィフト UI ビュー

意図の拡張

0 投票する
1 に答える
236 参照

ios - Xcode 11.4/iOS 13.4 では、NSUserActivity が常に setSuggestedInvocationPhrase に応答するとは限らないことがわかりました

オブジェクトを正常に作成および更新NSUserActivityして、Siri ショートカットと Handoff を提供するプロジェクトがあります。今日、久しぶりにこのコードに戻ってきましたが、デバイスにデバッグ ビルドがあり、Springboard から実行すると、認識されないセレクター メッセージでクラッシュすることに少し驚きました。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSUserActivity setSuggestedInvocationPhrase:]: unrecognized selector sent to instance 0x280083580'

デバッガーに接続して実行すると、このまったく同じバイナリで問題ありません。私は問題が何であるかを見るのにかなり途方に暮れています。非常に単純なテスト アプリを作成しましたが、同じ動作を示します。問題を示す単純な SwiftUI ビューを次に示します。

このコードは常に「setSuggestedInvocationPhrase を呼び出すことができます」と表示されるはずでありデバッガーから実行すると表示されると思います。しかし、アプリをスタンドアロンで起動すると、「setSuggestedInvocationPhrase を呼び出すとクラッシュします」というメッセージが表示されます。代わりは。

他の誰かがこのようなものを見たことがありますか? もしそうなら、ハードウェア上で Xcode 11.4 および/または iOS 13.4 にアップグレードした後に発生し始めましたか? これを iPod Touch、iPhone 11 Pro Max、および iPhone 8 のシミュレーターで再現できました。

現時点ではrespondsToSelector、フレーズを設定する前に明示的にチェックすることでこれを回避していますが、それは長期的にはあまり良い解決策ではありません.