問題タブ [kvc]

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 投票する
1 に答える
153 参照

core-data - 既存のオブジェクト参照を別のエンティティに追加する

独自のセットである、Word と呼ばれる NSManaged オブジェクトがいくつかあります。単語オブジェクトとそれに関連付けられたプロパティの事前設定されたリスト。

Word オブジェクトの部分的なリストを含む、WordSets という 2 番目の NSManaged オブジェクトがあります。(1 対多)

WordSet を既存の Word オブジェクトにリンクする方法を理解しようとしています。

word オブジェクトを選択できる tableView があります。次のコードにアウトレットを呼び出す追加ボタンがあります...

2 番目のテーブル ビュー アイテムを選択し、アウトレットを呼び出した後の NSLog:

ここで実際に得られないのは、オブジェクトへの参照を追加するだけでよい/追加する必要があるということです。

私は、テーブルの選択と、何らかの方法で NSArray に解釈されたように見えるオブジェクトのスケルトンの両方を持っており、アクセスできないようです。

オブジェクトの WordSets には 1 対多の単語があり、その逆もありますが、関係を追加するためにオブジェクトのハンドルを取得できないようです。

私は、KVC ランドか何かで何か間違ったことをしていると推測しています。NSlog にはオブジェクト ID があるため、FWIG のタスクは _wordArrayController.selectedObjects でデータを取得し、選択したオブジェクトのハンドルを取得してから、そのオブジェクトを WordSets インスタンスに追加することです。

これはどのように行われますか?

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

ios - removeAllObjects の KVO は、アイテムごとに個別に NSKeyValueChangeRemoval をトリガーします

で を見てNSArray propertyKVOます。この投稿KVCのように実装し、配列アクセサーのほとんども実装しました。それを変異させるために、私は. 2 つの問題を除いて、正常に動作します。KVCmutableArrayValueForKey

  1. を呼び出すと、削除されたアイテムごとに変更がremoveAllObjects得られます。削除されたすべてのインデックスを含む通知を1 つだけ受け取りたいです。NSKeyValueChangeRemovalNSKeyValueChangeRemoval

  2. 同様に、 を呼び出すと、追加されたアイテムごとaddObjectsFromArray:に取得されます。追加されたすべてのインデックスを含む通知をNSKeyValueChangeInsertion1 つだけ受け取りたいです。NSKeyValueChangeInsertion


KVCメソッドと. _ ただし、それらは呼び出されません。remove<Key>ItemsAtIndexes:insert<Key>Items:atIndexes:

次の回避策を使用します。

上記の回避策を必要とせずremoveAllObjectsに直接使用する方法はありますか?addObjectsFromArray:

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

ios - ネストされた NSArray フィルタリング

同じクラスのカスタム オブジェクトのコレクションのプロパティの最大値を取得する必要があります。オブジェクトは NSArray に格納され、プロパティはたまたま数値の別の NSArray になります。

詳しく説明しましょう:

CMData は、異なる値を持つことができる一連の異なるチャネルの特定の瞬間のサンプルをモデル化するクラスです。

(質問に関係のないクラスの他のプロパティを削除しました)

たとえば、sample[1970] は次のようになります。

ここで、analogChannelData の各要素 [i] は、timeStamp 970800 の特定のチャネル i の値を表します。

ここで、チャネル 31 の 4000 サンプルすべての最大値を取得したいと考えています。次のコードを使用します。

このプログラミング構造を NSPredcicate を介したフィルターで置き換えるか、valueForKeyPath: を使用して、必要なデータを最大限に取得したいと考えています。

forループなしでこれを行う方法を知っている人はいますか? NSPredicates や valueForKeyPath を使用しているだけですか?

よろしくお願いいたします。

更新 1

最後に、for ループ バージョンを keyPath バージョンに対してベンチマークしました (受け入れられた回答を参照)。はるかに高速に実行されるため、for ループを使用することをお勧めします。アルゴリズムのクラスで学んだいくつかの教訓を思い出して、値を格納するための配列を必要としないさらに高速なバージョンを実装しました。選択したチャネルを反復処理し、各反復で最大値を選択するだけです。これは断然最速のバージョンです。

そう:

  • バージョン 1: for ループ (上記のコードを参照)
  • バージョン 2: カスタム プロパティを含むバージョン (Marcus からの選択された回答、更新 2 を参照)
  • バージョン 3: 新しいコード

バージョン 3 のコード:

パフォーマンス:

iOS シミュレーターでの 20.000 回の反復後:

  • バージョン 1: 12.2722 秒。
  • バージョン 2: 21.0149 秒。
  • バージョン 3: 5.6501 秒。

決定は明らかです。3 番目のバージョンを使用します。

更新 2

さらに調査した結果、KVC が内部配列の個々の要素に対して機能しないことが明らかになりました。次のリンクを参照してください: NSArrays の NSArrays を使用した KVCおよびTo-Many プロパティのコレクション アクセサー パターン

とにかく、要素の最大値を計算したかったので、KVC を機能させるためにいくつかのトリックを使用するよりも、配列を反復処理する方が適切です。

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

ios - キー値コーディングを使用したコア データの検証

Core Data モデルを作成し、データを更新および削除するためのメソッドを含むカテゴリ クラスを作成しました。クラスにバリデーションメソッドを追加しようとしており、KVC を使用しようとしていますが、少し苦労しています。

私の問題はこれです。検証メソッドは、実際にコンテキスト [context save:&internalError] を保存したときにのみトリガーされます。それらは正しく機能していますが、保存プロセスも完了します。私の質問はこれです、検証がトリガーされるのはいつですか、保存する前にトリガーできますか、それとも私はこれを完全に間違っていますか?

私のコード:

0 投票する
0 に答える
360 参照

ios - リレーションシップを含むマネージド オブジェクト キーパス オブザーバーの KVO 関連の例外

viewController の init メソッドでキー パスが監視されています。( event は、この viewController のプロパティです

イベントは管理オブジェクトであり、場所と 1 対 1 の関係にあります。(各イベントには 1 つの場所オブジェクトがあり、その逆も同様です)

奇妙なことに、イベント オブジェクトがプロパティ viewController.event に設定される前に「場所」関係が発生しないと、次のエラーが発生します。

私が言ったように、管理対象オブジェクトをviewControllerのプロパティに設定する前に次の行を追加すると、このエラーは修正されます。この場合、クラッシュせず、正しく動作します

明らかにこれは回避策です。これを修正するためのアイデアはありますか?

編集

@"location" キーパスで に使用しsetRelationshipKeyPathsForPrefetchingたものを forNSFetchRequestに使用すると、バグの回避策になるのではないかと考えていましたが、奇妙なことに、このバグは一時的に消えました。NSFetchedResultsController私がした唯一のことは、アプリのさらなる開発でした。つまり、アプリを数回再インストールしました。そのため、DB が再び大きくなったときに再表示される可能性があります。これが発生したら更新します

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

ios - 可変配列 Objective-C の KVC アクセサで使用する方法

配列の変更を検出するために、KVC 準拠の可変配列を作成しようとしています。

私のヘッダーファイルには次のものがあります:

ドキュメントに示されている KVC の一般的なアクセサ メソッド。メイン ファイルにアクセサー メソッドを実装すると、次の関数はセレクターの呼び出しを認識しません。

エラーは、"no visible @interface for NSarray" declares selector:'' で、関数内の各セレクターについてここにあります。これらのセレクターが存在しない理由がわかりません。助けていただければ幸いです。ヘッダー ファイルの他の 4 つの関数は問題ありません。