問題タブ [core-data]
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.
cocoa - オブジェクトを作成したスレッドで明示的にアクセスしない場合、スレッド外で作成したオブジェクトを操作しても安全ですか?
私はココア ソフトウェアに取り組んでおり、大量のデータ インポート (コア データ) 中に GUI の応答性を維持するために、メイン スレッドの外でインポートを実行する必要があります。
スレッドの実行中にそれらのオブジェクトに明示的にアクセスしない場合、ロックを使用せずにメイン スレッドでそれらのオブジェクトを作成したとしても、それらのオブジェクトにアクセスしても安全ですか。
objective-c - setPrimitiveValue:forKey: および対多関係
Apple のドキュメント-setPrimitiveValue:forKey:
は、対多関係を管理するために使用する場合、2 つの点であいまいです。
最初に彼らは次のように述べています:
対多関係を新しい NSMutableSet オブジェクトに設定しようとすると、(最終的には) 失敗します。
最終的?!それは一体何の意味ですか?後で失敗し-[NSManagedObjectContext save:]
ますか? 管理対象オブジェクトがフォルトになり、ページインされたときは? いつ?オンデマンドで一貫して障害を再現するテスト ケースを作成できますか?
次に、このケースを正しく処理するためのサンプル コードを提供すると、次のように書かれています。
最初に既存のセットを取得します
primitiveValueForKey:
(メソッドが返されないことを確認してくださいnil
)
メソッドがnil を返す場合はどうすればよいですか? assert()
オブジェクトグラフ全体が破損し、保存するとデータが失われるため、すぐに失敗しますか? NSAssert()
発信者への警告としてそれをオンにしますが、押し続けます(黙って何もしません)?
今のところNS[Mutable]Set
、その場合は次のように直接直接割り当てています。
それは間違っていますか?
cocoa - マージされたモデルからの NSManagedObjectModel のクロスモデル関係?
関連するモデルをマージして作成された NSManagedObjectModel 内でエンティティが常に使用される場合、個別の NSManagedObjectModels で定義されているエンティティ間の関係をモデル化することは可能ですか?
たとえば、モデル 1Foo
が関係 (1 対 1)を持つエンティティをtoBar
定義し、モデル 2が関係 (1 対 1) を持つエンティティを定義するとします。を使用して CoreData スタックを構築し、モデル 1 とモデル 2 をマージします。モデル内の関係であるかのように動作するように、データ モデラーまたはプログラムでこれらの関係を定義する方法はありますか?Bar
toFoo
-[NSManagedObjectModel mergedModelFromModels]
cocoa - 対多キーの述語行テンプレートを自動的に生成しますか?
私の Core Data マネージド オブジェクト モデルには、baz という名前のエンティティ Baz との対多関係 (対多逆数を持つ) を持つエンティティ Foo があります。Baz には「tag」という名前の文字列プロパティがあります。[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription]
NSPredicateEditor の行エディターを作成するために使用すると、結果には (予想どおり) 次のような行テンプレートが含まれます
[ポップアップ: baz.tag] [ポップアップ: 含む|である|ではない|...] [テキストフィールド]
ポップアップから「含む」を選択すると、述語を含むクエリが期待どおりに機能します。他のポップアップ (「is」など) を選択すると、「to-many key not allowed here」というエラーが表示されます。行エディターを手動で使用できます[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
か、または手動で作成する必要がありますか?
cocoa - 自動生成された述語行テンプレートの NSDatePicker の変更
によって返されるプロパティの行テンプレートを変更するNSDatePickerElementFlags
にはどうすればよいですか? 時間:分と日付を表示したいと思います。NSDatePicker
NSDate
[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
NSDatePicker
更新 cocoa-dev リストから収集した回答を以下に追加しました。
cocoa - Core Data でのエラー処理
数週間前、重要なアプリケーションで初めて Core Data を使い始めました。私を驚かせ、混乱させたものの 1 つは、エラー処理のしくみです。例を挙げると、ファイルの URL を設定したときに参照によって返される NSError オブジェクトを適切に処理するために、Finder でデータ ファイルを「ロック」として設定することを最初に試みました。驚いたことに、nil を返して NSError を設定する代わりに、永続ストア コーディネーターは、基になる NSData からキャッチされない例外を発生させました!
同時に、Core Data ではエラー処理が少し不要な場合もあるようです。たとえば、プログラマーのミス以外にフェッチ要求でエラー処理が必要になる明確な理由はわかりません (ちなみに、私の経験では例外も発生します)。これらの場合、私は NSError 参照ポインターに NULL を渡してきました。
try / catch ブロックと NSError の間で、Core Data をなだめるためのコードを書くのに多くの時間を費やすことができましたが、それについては実用的になりたいので、決して実行されないエラー コードに時間を費やしません。それを念頭に置いて、アプリケーションでのエラー処理にどのようにアプローチしますか? 現実の世界で見た中で、必ず説明する必要のあるエラーは何ですか?
cocoa - コア データ エンティティをフェッチするが、サブエンティティはフェッチしない
Parent
ルートエンティティでありChild
、のサブクラスである階層に編成されたエンティティがあるとしParent
ます。NSArrayController
のエンティティのみを取得するように を設定したいのですが、 は取得しParent
ませんChild
。
Interface Builder でアレイ コントローラのエンティティ名を に設定するとParent
、すべてParent
のChild
エンティティが取得されます。最初に、Interface Builder で配列コントローラーのフェッチ述語を次のように設定しようとしました。
これは XML ストアでは機能しましたが、SQLite ストアに切り替えると機能しなくなりました。次のエラーが表示されます。
回避策として、親エンティティのみをフィルター処理するためにフィルター述語 (entity.name
上記と同じ述語を使用) を設定しています。awakeFromNib
どうやら、エンティティがメモリ内にあると、その述語は有効になりますが、SQL を使用したフェッチ述語では使用できません。
SQLiteストアで動作するフェッチ述語を使用して、エンティティParent
のみをフェッチする方法はありますか? Child
フィルタ述語で無視するだけのエンティティを取り込むのは無駄に思えます。
cocoa - Core Data を使用するか、カスタム モデルを展開するかを決定する要因は何ですか?
たとえば、Photoshop や Gimp などの画像操作プログラムなど、Core Data に適していないアプリケーションが存在する可能性があります。しかし、Address Book や iCal などの Core Data に適したアプリケーションの場合、カスタム モデルではなく Core Data を選択する基準は何ですか?
objective-c - NSDatePickerのtimeInterval属性にバインドできますか?
開始日と終了日を持つEventクラスを持つCoreDataアプリケーションがあります。これらをNSDatePickerウィジェットのペアにバインドするのは簡単ですが、Leopardで使用可能なNSRangeDateModeで機能するようにしたかったのです。
NSDatePickerには、timeIntervalを処理する2つのメソッドがありますが、これにバインドできないようです。
更新:手動呼び出しを使用してバインディングを実行しましたが、半分は機能します:
基になるオブジェクトが変更されたときにNSDatePickerにtimeIntervalを設定しますが、NSDatePickerのtimeIntervalが変更されたときに基になるオブジェクトを設定しません。
macos - 「ドキュメントが変更されました」という警告なしでコア データ スキーマを手動で移行しますか?
Core Data ドキュメント ベースのアプリ (10.5 のみ) のデータ モデルはフレームワーク内にあるため、Core Data マッピング モデルを使用した自動スキーマ アップグレードは機能していないようです。Core Data 機構は、アプリのメイン バンドルにない場合、適切なデータ モデルまたはマッピング モデルを見つけられないようです。そのため、自動移行を使用する代わりに、手動で移行を実行して
configurePersistentStoreCoordinatorForURL:ofType:...
います
NSPersistenDocument
サブクラス (以下のコード)。永続ストアを一時ファイルに移行し、移行が成功した場合は既存のファイルを上書きします。ドキュメントは、「このドキュメントのファイルは、開いた後、または保存した後で、別のアプリケーションによって変更されました」というメッセージとともにエラーを表示します。保存しようとすると。このリストの他の人が指摘しているように、これはドキュメントのファイルを「背後で」変更したためです。以下に示すように、ドキュメントのファイルの更新日を更新しようとしましたが、「ドキュメント "test.ovproj" の場所を特定できません」というメッセージが表示されたエラー ダイアログが表示されます。保存しようとすると。このエラーの理由はよくわかりませんが、不要なメッセージ (この場合) を別のメッセージと交換することは、私が望んでいたことではありません。
誰でもガイダンスを提供できますか?これらの (この場合は不要な) 警告のいずれかをトリガーすることなく、ドキュメントの永続ストアのスキーマを手動でアップグレードする方法はありますか?
サブクラスのデータ ストアをアップグレードするためのコード
-configurePersistentStoreCoordinatorForURL:ofType:...
: