問題タブ [nssecurecoding]
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.
ios - userinfo にカスタム オブジェクトを含む UNMutableNotificationContent
UNMutableNotificationContent の userinfo で cutom オブジェクトを使用したいのですが、うまくいきません。カスタム オブジェクトを userinfo に配置すると、通知が発生しません。
このコードを使用すると、通知が発生します。
次の場合、エラーは発生しませんが、通知は発生しません。
TestClass はカスタム クラスです。定義は次のとおりです。
何か案が?
swift - `cannotDecodeObjectOfClassName` が `NSKeyedArchiverDelegate` で呼び出されない
不明なクラスがプロトコルを介して安全にデコードされているNSKeyedUnarchiver
アーカイブ解除例外をキャッチしようとしています。NSInvalidUnarchiveOperationException
NSSecureCoding
私が使用しているソリューションは、デリゲート プロトコルを実装することにより、関連するNSKeyedUnarchiverDelegate SO 投稿NSKeyedUnarchiverDelegate
に基づいているため、unarchiver(_:cannotDecodeObjectOfClassName:originalClasses:)
. ただし、このデリゲート メソッドは、デコード中に不明なクラスに遭遇したときに呼び出されないようです。
配列オブジェクトを安全にアーカイブ解除するために使用するコード スニペットを次に示します。
myは、私が指摘した元のNSKeyedUnarchiverDelegate SO 投稿UnarchiverDelegate
と同じように実装されています。私のセットアップでは、例外はスローされませんが、代わりに実行時例外が発生します。decodeObject(of: allowedClasses, forKey: key)
これは、そのドキュメントに基づいて、呼び出されるべき例外NSKeyedUnarchiverDelegate
の 一種であると思われます:unarchiver(_:cannotDecodeObjectOfClassName:originalClasses:)
指定された名前のクラスがデコード中に使用できないことをデリゲートに通知します。
しかし、私の場合、このメソッドは上記のスニペットでは呼び出されません (ただし、デコードで問題が発生しない場合は、unarchiverWillFinish(_:)
またはのような他のデリゲート メソッドが通常どおり呼び出されます。unarchiver(_:didDecode:)
元の投稿とは異なり、decodeTopLevelObjectForKey
try?
NSSecureCoding
ここで説明したように、プロトコルで安全なエンコードとデコードをサポートする必要があるため、 で例外を処理できるクラス関数を使用できません。これは、処理できる例外をスローしない を使用することを強制しますdecodeObject(of:forKey)
。また、アプリのクラッシュにつながる実行時例外をスローする前に、デリゲートに通知しません。
デリゲート メソッドunarchiver(_:cannotDecodeObjectOfClassName:originalClasses:)
が実際に呼び出されるのはどのようなシナリオですか? デコードが成功しない場合にランタイム クラッシュを回避できるようにNSInvalidUnarchiveOperationException
、セットアップでをリッスンして反応するにはどうすればよいですか?NSSecureCoding
ios - プロトコルに準拠するオブジェクトをデコードするための decodeObject(of: forKey:) の使用
以下への準拠を必要とする Objective-C プロトコルがありますNSSecureCoding
。
に準拠するオブジェクトへの参照を格納する親オブジェクトがありMyProtocol
、親オブジェクトも に準拠させたいと考えていNSSecureCoding
ます。これを試すと:
エラーが表示されます: 'decodeObject(of:forKey:)' is unavailable in Swift: use generic 'decodeObjectOfClass(_:forKey:)'
。
エンコードしたオブジェクトの特定のクラスがわからない場合、NSSecureCoding を使用する方法はありますか?