72752


**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)](https://i.stack.imgur.com/MPqjW.png)

ですが、この **Value Transformer** を設定する欄のプルダウンメニューには、同じくdeprecateされた、
**NSUnarchiveFromData** と、 **NSKeyedUnarchiveFromData** の２つしかありません。おそらくは、
**NSUserDefaults** にアーカイブされているデータを展開する設定だからではないかと想像します。

質問は、この **Value Transformer** に、deprecateされた **NSKeyedUnarchiveFromData**
以外のものを設定することはできるのか、可能だとしたら何を設定すれば良いのかということです。

ご教授、よろしくお願いいたします。


CC BY-SA 4.0
2020-11-29T14:43:12.653
72275
2020-12-18T16:57:30.890
516
question
xcode storyboard
「Binding transformer name NSKeyedUnarchiveFromData is deprecated since macOS 10.14」という警告の処置


**NSKeyedUnarchiveFromData** は、deprecateなので、使ってはいけません。替わりは、
**NSSecureUnarchiveFromData** ですが、そのまま置き換えても、ダメです。  
**NSSecureUnarchiveFromDataTransformer** のサブクラスを作成し、そこで、値の **evaluation**
を許可する必要があります。（デフォルトでは許可されていないため）  
また、対象のアプリが、以前からのデータ（ソートディスクリプタ）を持っている場合も、
**NSSecureUnarchiveFromDataTransformer**
のサブクラスを作成して、古いデータをアンアーカイブする処理が必要になります。  
下のリンクは、上に書いた説明を具体化したコードを含むサンプルです。（この回答とサンプルコードは、Appleの開発者向けサポートとのやり取りをサマライズしたものです）

[サンプルXcodeプロジェクト](https://drive.google.com/uc?export=download&id=1vQKMykwuQ0HUYTkcgCRbpCAOF0Wc9hYY)


CC BY-SA 4.0
2020-12-18T16:57:30.890
72752
2020-12-18T16:57:30.890
516
72275
answer