質問: **Cocoa-Bindings**を使って**NSTableView**にデータを表示しています。**NSTableView**は**セルベース**です。テーブルの各カラムは、**Array Controller**に**arrangedObjects**というコントローラーキーでバインドされています。 一方、**Array Controller**は、各カラムのソートディスクリプタを保存するため、**UserDefaults Controller**にバインドされています。 表題の警告は、この**Array Controller**と**UserDefaults Controller**のバインドの際、**Value Transformer**に、deprecateされた、**NSKeyedUnarchiveFromData**を設定していることによって発生しているようです。 ![画像の説明をここに入力](https://i.stack.imgur.com/MPqjW.png) ですが、この**Value Transformer**を設定する欄のプルダウンメニューには、同じくdeprecateされた、**NSUnarchiveFromData**と、**NSKeyedUnarchiveFromData**の2つしかありません。おそらくは、**NSUserDefaults**にアーカイブされているデータを展開する設定だからではないかと想像します。 質問は、この**Value Transformer**に、deprecateされた**NSKeyedUnarchiveFromData**以外のものを設定することはできるのか、可能だとしたら何を設定すれば良いのかということです。 ご教授、よろしくお願いいたします。
回答: **NSKeyedUnarchiveFromData**は、deprecateなので、使ってはいけません。替わりは、**NSSecureUnarchiveFromData**ですが、そのまま置き換えても、ダメです。 **NSSecureUnarchiveFromDataTransformer**のサブクラスを作成し、そこで、値の**evaluation**を許可する必要があります。(デフォルトでは許可されていないため) また、対象のアプリが、以前からのデータ(ソートディスクリプタ)を持っている場合も、**NSSecureUnarchiveFromDataTransformer**のサブクラスを作成して、古いデータをアンアーカイブする処理が必要になります。 下のリンクは、上に書いた説明を具体化したコードを含むサンプルです。(この回答とサンプルコードは、Appleの開発者向けサポートとのやり取りをサマライズしたものです) サンプルXcodeプロジェクト