問題タブ [nsvaluetransformer]
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 - NSValueTransformer を使用した iOS コア データの暗号化
Core Data と CommonCrypto を使用してデータを暗号化する実験を行っています。NSValueTransformer を使用して遅延暗号化と復号化を試みています。
ただし、暗号化されたデータを永続ストア コーディネーターに保存しようとすると、失敗します。データをデータベースに保存しようとするたびに、次のようになります。
-[__NSCFString bytes]: 認識されないセレクターがインスタンスに送信されました
ある種のデータベースと NSManagedObject の不一致だと確信していますが、わかりません。おそらくかなり単純だと思いますが、解決策が見つかりません。私のコード:
NSValueTransformer
NSValueTransformer を機能させるために私がしなければならなかったことは次のとおりです。
上記のコードがなければ、NSValueTransformer は呼び出されませんでした。
データベース フィールドを Transformable 型としてマークし、TryHardEncryption という名前を付けました。ここで何が悪いのか知っていますか?
編集 関連するプロパティは次のとおりです。
暗号化関数と復号化関数の両方をデバッグすると、文字列が返されます。
swift - Swift で Core Data の NSValueTransformer を実装する場所
それぞれが非標準のデータ型を持つコア データ ストアにエンティティを配置しようとしています - 1 つは NSDocument で、もう 1 つは NSURL です。.xcdatamodeld 内で、それらを Transformable として宣言する必要があることがわかりました。そして、それらを NSData に変換するために NSValueTransformer を実装するものを追加する必要があると思います(... または、それを自動的に行うデフォルトのトランスフォーマーはありますか?)
質問は簡単に答えられるべきだと思います。どこに実装すればよいですか? Swift でこれを行う明示的な例は見つかりませんでした。Objective-Cの例がありますが、.h ファイルと .m ファイルが分離されているため、これが Swift のどこに行くのかわかりません。
folderURL という属性を持つ Notebook というエンティティ タイプがあるとします。データベースでは Transformable タイプで、実際の変数では NSURL タイプです。(これは単純な例なので、例として使用しています。NSURL を文字列に変換するように言わないでください。他の Transformable では機能しないためです。)
質問: folderURL の NSValueTransformer をどこに配置すればよいですか? ノートブックに実装する必要がありますか? ノートブック + CoreDataProperties を使用する必要がありますか? または、それを実装する FolderURL という別のサブクラスが必要ですか? その場合、そのサブクラスを Notebook (および/または Notebook+CoreDataProperties) で参照するにはどうすればよいですか?
(同様のタイトルの以前の質問がありましたが、彼らはすでにこれよりも少し先に進んでいるようです - 彼らは「どこで」について尋ねたり実演したりしていません.)
ios - NSValueTransformer、使い方は?
クラスを使用してオブジェクトをカスタム オブジェクトNSValueTransformer
に変換しています。NSDictionary
メソッドを使用してサブクラスを既に実装しています。
次に、サブクラスを次のように登録しました。
からカスタムオブジェクトを取得する方法を考えていますNSDictionary
。これに関する情報が見つからないため、 inCoreData
や.xib
files などのバインディングで使用する場合のみ。
NSValueTransformer
私の目的に使用できますか?->NSDictionary
カスタム オブジェクトに変換します。
ありがとう!
xcode - ibtool 実行中の例外: 名前の値トランスフォーマーが見つかりません
Xcode を 8.0 (8A218a) にアップグレードしたばかりで、Swift 2.3 のプロジェクトを Swift 3.0 に変換しています。現在残っている唯一の問題は、次のエラーです。
「ibtool 実行中の例外: UTIToIconTransformer という名前の値トランスフォーマーが見つかりません」
は次のUTIToIconTransformer
ように定義されます。
Swift 2.3 のとき、コードは正常に機能しました。この値トランスフォーマーを使用するバインディングは、次のように設定されます。
このバインドを削除すると、アプリが実行され、行のタイトルが正しく表示されます。
ここで、ここで StackOverflowで、ここで NShipsterで提案されているようNSValueTransformer.setValueTransformer()
に、アプリデリゲートの+initialize()
、applicationDidFinishLaunching
および値トランスフォーマーので呼び出してみました (ただし、「通常、シングルトンインスタンスは +initialize に登録されます。値変換サブクラスのメソッドであるため、それ以上のセットアップなしで使用できます。" は Apple のドキュメントに準拠しています)、すべて成功しませんでした。+initialize()
アップルのドキュメントでは、それは言う
しかし、に登録しても役に立ちませんでしたAppDelegate
。override class func initialize()
Xcode 7 と Swift 2.3 では、登録なしでも機能しました。
ios - CoreData で Swift の日付を使用する
データベース モデルに多数の日付フィールドがあります。CoreData では、「Use Scalar Type」オプションに応じて、NSDate または TimeInterval を使用して日付を保存できます。
ただし、日付をDateオブジェクトとして使用したいので、これらのオプションはどちらも私にとっては良くありません。NSDate は暗黙的に変換できないためDate
、値をキャスト/変換するDate
か、NSManagedObject クラスに多くのカスタム セッター/ゲッターを実装する必要があります。
使用しようとしましValueTransformer
たが、のような @objc 以外のクラスでは機能しませんDate
。
Date
では、CoreData との間で値を保存および取得する簡単な方法はありますか?