問題タブ [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.

0 投票する
4 に答える
3571 参照

ios - NSURLをCoreDataに保存する正しい方法は何ですか?

コアデータオブジェクトでNSManagedObjectIDをアーカイブ/アーカイブ解除しようとしています。これにより、次回アプリを起動したときに、これらのIDを取得し、それらを使用して特定のオブジェクトをフェッチできます。

次のようにIDを「アーカイブ」してみました。

そして、このようにアーカイブを解除します([anyObject]をテストしているので、この時点で1つしかありません):

しかし、上記のようにURLを取得しようとすると、次の例外が発生します。

エンティティの属性はXcodeを介して「変換可能」に設定され、コアデータのドキュメントは空の場合はデフォルトのトランスフォーマーを使用することを示唆しているように見えるため、Xcodeのトランスフォーマー値フィールドを空のままにしました。

私は何が間違っているのですか?

0 投票する
1 に答える
1231 参照

ios - データを暗号化するための NSValueTranformer

NSValueTransformer を使用して、いくつかのコア データ列を暗号化したい。アイデアは、データ型変換可能を使用し、データ型のトランスフォーマーを定義することです。変換メソッド内で、値を暗号化/復号化したい。実際には何もしないトランスフォーマーを定義しました-暗号化は現在実装されていません。

方法

有効な値で呼び出されますが、オブジェクトをフェッチすると、次のエラーが発生します。

*キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[__NSCFString バイト]: 認識されないセレクターがインスタンス 0xf5859f0 に送信されました'

何が間違っているのですか?

編集:

NSData に変換する必要があり、その逆も必要であることに気付きました。今では正常に動作します

0 投票する
1 に答える
2244 参照

cocoa - Cocoa:ブールプロパティをNSCellStateValueにバインドする方法は?

enabledのブールプロパティをNSTextFieldの状態にバインドしたいと思いNSButtonます。NSValueTransformerの状態をに変換するカスタムを追加してみNSButtonましたNSNumber。ただし、そのシナリオでは、何らかの理由でテキストフィールドが常に無効になっています。私の2番目のアプローチ: 。NSValueTransformerなどのリターンプリミティブタイプを提供していないため、tobadも失敗しますBOOL

例:
スクリーンショットは、チェックボックスの状態がであるためにテキストフィールドが無効になっている例を示していますNSOnState。また、ラベルをこの状態にバインドしたいと思います。

無効なテキストフィールド

さらに、 InterfaceBuilderで「無効なテキスト」を設定できれば便利です。上記の例では、関連するクラスにテキストを設定します。


編集:

アカウントテキストフィールドのenabledプロパティのモデルキーパスself.anonymousLoginCheckbox.stateとして設定しました。パスワードテキストフィールドについても同様です。ただし、動作しませ

InterfaceBuilderバインディング


アップデート:

私はGitHubで利用可能なサンプルプロジェクトを作成し、NicolasBachschmidtによって親切に説明された実装を示しました。

0 投票する
1 に答える
1311 参照

objective-c - Value Transformer を使用した NSPopupButton バインディング

値トランスフォーマーを使用したバインディングによって設定されたポップアップ ボタンで表示されるものが、本来あるべき方法であるかどうかはわかりません。値トランスフォーマーとテーブル ビュー) は、transformedValue: メソッドの "value" パラメーターが、配列内の個々の文字列ではなく、配列コントローラーにバインドされた配列全体であることです。テーブルビューでこれを行った場合、トランスフォーマーはテーブルに表示された行ごとに1回呼び出され、「値」パラメーターは、コンテンツ配列として機能する配列全体ではなく、その行と列にバインドされているオブジェクトですアレイコントローラー用。

これをテストするための非常に単純なアプリがあります。アプリのデリゲートには次のものがあります。

RDTransformer クラスには次のものがあります。

IB では、ウィンドウに NSPopupButton を追加し、オブジェクト リストに配列コントローラーを追加しました。コントローラーのコンテンツ配列は App Delegate.theData にバインドされ、ポップアップ ボタンのコンテンツ値は値トランスフォーマー testTransformer を使用して Array Controller.arrangedObjects.name にバインドされます。

プログラムを実行すると、TransformedValue: メソッドからのログは次のようになります。

これは、私が SO で見ることができる他の人の経験ではないようです。バインディングまたは値トランスフォーマーのいずれかで間違っていることはありますか?

0 投票する
1 に答える
1079 参照

objective-c - Core Dataエンティティの変換可能な属性をc構造体へのポインタにすることはできますか?私の変圧器は呼ばれていません

CoreDataで永続化されたエンティティを作成しようとしています。このエンティティにはいくつかのプロパティがあり、そのうちの1つは非標準の属性であるstateです。state属性は、いくつかのプロパティを持つC構造体へのポインターです。私のデータモデルは次のようになります。

エンティティ:

MDInstance

属性:

  • 期間:整数16
  • 移動:整数16
  • 名前:文字列
  • 状態:変形可能。TransformerをMDStateTransformerに設定しました。

クラスを生成し、stateプロパティを編集しました。インターフェイスは次のようになります。

実装は次のようになります。

MDStateTransformerという値のトランスフォーマーを作成しました。これの実装は(おそらく)重要ではありません。私はallowsReverseTransformation戻ってきたYEStransformedValueClass戻ってき[NSValue class]た、そして私は実装transformedValue:し、reverseTransformedValue:

application:didFinishLaunchingWithOptions:最後に、次のようにAppDelegateにMDStateTransformerを登録しました。

MDInstanceの新しいインスタンスを作成し、その属性(state属性を含む)を設定してからエンティティを保存しようとすると、トランスフォーマーが呼び出されることはありません。

トランスフォーマーのinitメソッドにストップポイントを設定し、インスタンス化しています。別のものを入れましたがtransformedValue:、関数が呼び出されていません。

ただし、状態属性がポインターではなく単なる状態構造になるようにMDInstanceを更新し、ポインターではなく構造体で機能するようにトランスフォーマーを更新すると、transformedValue:が呼び出されます。

ac structへのポインタであるオブジェクトにカスタム属性を持つことは可能ですか?もしそうなら、私が間違っていることについて何か考えはありますか?

0 投票する
2 に答える
4099 参照

ios - コアデータの暗号化

CoreDataの暗号化について質問があります。機密性の高いユーザーデータをCoreDataSQLiteデータベースに保存しています。重要な値はすべて変換可能であり、私はAES256を使用して、すべての値の個別のIVを含め、「オンザフライ」でそれらを暗号化および復号化します。暗号化キーは、ユーザーが選択したパスワードのSHA512ハッシュです。これは今のところ非常にうまく機能しています。

次に、ユーザーパスワードについて説明します。ユーザーがアプリを起動すると、パスワードの入力を求められます。パスワードはSHA512でハッシュされ、iOSキーチェーンに保存されています。書き込みまたは読み取り操作ごとに、NSValueTransformerはキーチェーンからパスワードを取得します。アプリを閉じている場合は、キーチェーンからパスワードハッシュを削除します。

私のCoreDataデータベースには、唯一の値として乱数!=0を持つ特別なエンティティがあります。ユーザーが正しいパスワードを入力したかどうかをテストするために、このエンティティを取得して番号を読み取ります。=の場合!0、復号化が失敗するとNSValueTransformerは常に0を返すため、パスワードが正しいことを知っています。

さて、私の実際の質問:これは暗号化の良いアプローチだと思いますか?入力したパスワードが正しいかどうかを他にどのようにテストしますか?

NSValueTransformerは常にキーチェーンにアクセスする必要があるため、アプリの実行中にパスワードハッシュをキーチェーンに保存すると、すべてが遅くなるのではないかと少し心配しています。パスワードハッシュをメモリに保持するだけで十分に安全なので、アプリを閉じると削除されますか?

0 投票する
3 に答える
168 参照

ios - NSManagedObject 属性の NSValueTransformer を条件付きで無効にすることは可能ですか?

具体的には、「statusCode」属性が変換可能に設定された NSManagedObject と、NSStrings から NSNumbers に、またはその逆に変換する可逆値トランスフォーマー サブクラスがあるとします。JSON を受け取り、JSON の「ステータス」キーからの文字列が、NSManagedObject でそのステータス コードを表す NSNumber に自動的にマップされるように、値トランスフォーマーを使用するという考え方です。逆に、NSManagedObject をサーバーにアップロードすると、その時点でステータス属性が NSNumber から JSON の文字列に変換されます。

ここまでは順調ですね。しかし、NSManagedObjec の status プロパティから単純な int を取得できるようにしたい場合はどうすればよいでしょうか。つまり、3 つのケースをカバーするために嘘をつきます。

  1. myManagedObject.status = [JSONResponse valueForKey:@"status"](トランスフォーマーを使用して NSString -> NSNumber を実行する必要があります)
  2. [JSONforUpload setValue:myManagedObject.status forKey:@"status"](トランスフォーマーを使用して NSNumber->NSString を実行する必要があります)
  3. コードの他の場所から、次の行に沿ったもの: if(myManagedObject.status & statusInProgress) ...statusInProgress は列挙型です。

値トランスフォーマーを一時的に無効にできると思っていますが、NSManagedObject がそれを参照しているかどうか、または明らかに登録済みトランスフォーマーのテーブルを保持している NSValueTransformer クラスから無効にする必要があるかどうかはわかりませんか?

3番目のケースでは、ビットごとの比較を行うだけでよいことはわかっていますが、このオブジェクトのユーザーの観点から、自動的に返される[myManagedObject.status intValue]方法があるかどうか疑問に思っています。intValue]

何か案は?

0 投票する
1 に答える
2533 参照

ios - カスタム クラスを Coredata に保存する

こんにちは、私は変換可能な属性タイプを使用しており、フォーラムの 1 つでアーカイブの手順に従いました。

しかし、それは言う

CoreData: 警告: エンティティ 'SurveyData' 2013-04-30 09:44:16.022 TestReachability[11641:c07] -[SurveyApplication encodeWithCoder:]: 認識されないセレクターが送信されましたインスタンス 0x845cb00 へ 2013-04-30 09:44:16.023 TestReachability[11641:c07] *キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。

これが私のコードです

SurveyAppplication オブジェクトは私のカスタム クラスであり、オブジェクトを作成してコア データを保存しようとしています。

ありがとうディーラジ