NSKeyedArchiver でアーカイブした後、NSImage のアニメーションが失われる
-
19-09-2019 - |
質問
次の状況:
私の例があります NSObject
サブクラス化されたオブジェクト。そのプロパティの 1 つは、 NSImage
. 。オブジェクトをインスタンス化した後、それを次のように変換します NSKeyedArchiver
データに変換し、ネットワーク経由で送信し、アーカイブを解除します。 NSKeyedUnarchiver
画像を NSImageView
(setAnimates:はい)。ここまでは何の問題もありません。他のマシンでも画像を表示できます。さて問題は:
アニメーション GIF を送信しても、アニメーションしません。理由がわからない...なぜアニメ化が進まないのか何か考えはありますか?ありがとう!
アップデート
アニメーション画像をアーカイブする前に開くと、 NSImageView
それをアニメーション化します。問題はおそらくアーカイブです...
更新 2
データをネットワーク経由で送信せず、アーカイブとアーカイブ解除だけを行い、ワークフロー全体をテストしました。私が疑ったように、これは NSKeyed(Un)Archiver の問題です。
アニメーションが失われます。 しかし、これを防ぐにはどうすればよいでしょうか?
解決
画像インスタンスではなく、元の画像データをアーカイブするだけです。
他のヒント
デフォルトでは、 NSImage
元のソース画像データは保持されません。おそらく何が起こっているのかというと、 NSImage
1 つのフレームのみの静的ビットマップをアーカイブし、元のコンテンツを破棄します。
電話したら [yourNSImageObject setDataRetained:YES]
そうして NSImage
元のデータ (この場合はアニメーション GIF) を保持する必要があります。イメージが最初に作成されるときにこれを実行して、アーカイブまたはアーカイブ解除されたときに何が起こるかを確認することをお勧めします。