問題タブ [managedobjectcontext]

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 に答える
1689 参照

ios - 複数の子管理対象オブジェクト コンテキストのマージ

iOS アプリケーションで、コア データを Web バックエンドと同期しようとしています。同期に別のバックグラウンド管理オブジェクト コンテキストを使用したいので、同期の処理中にメイン コンテキストが UI からの変更を自由に受け入れられるようにします。両方のコンテキストは、このブログ投稿http://www.cocoanetics.com/2012/07/multi-context-coredata/に従って、ディスクへの書き込みコンテキストの子です。

私の質問は、ディスクに保存する前に両方の子コンテキストをマージするにはどうすればよいですか?

contextDidSaveNotifications を購読すると、次を使用してコンテキストをマージできます

しかし、ドキュメントによると...「このメソッドは、他のコンテキストで更新されたオブジェクトを更新し、新しく挿入されたオブジェクトでエラーを発生させ、削除されたオブジェクトで deleteObject:: を呼び出します。」

更新されたオブジェクトを更新して mainContext に加えられた変更を失いたくはありませんが、両方の変更セットをマージします。

私はマルチコンテキストのコアデータを初めて使用するので、これを間違った方法で考えている可能性があります。

何か案は?

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

ios - コア データ レコードを保存しようとした後にエラーが発生しました

コア データ レコードを追加するビュー コントローラーがあります。コア データ エンティティ名は FavoriteThings で、属性は thingname です。SaveButtonAction という名前の保存ボタン アクションがあります。ボタン内をタップすると、ToDoTextField というテキスト フィールドに挿入されたテキストが保存されるはずですが、次のログ エラーが表示されてアプリがクラッシュしました。

これはメソッドのコードです

お時間をいただきありがとうございます..

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

sqlite - 2 つのストアで 1 つの ManagedObjectContext と PersistentStoreCoordinator を使用する場合にデータを保存する方法

問題文

同じ PersistentStoreCoordinator に割り当てられた 2 つの SQLite ストアの 1 つである読み取り/書き込みストアにレコードを保存しようとすると、iPhone アプリがクラッシュします。レコードを保存する際の明らかな問題の 1 つは、PersistentStoreCoordinator がデータを保存するストアを認識していないことです (これを実現する方法がわからないためです)。

まず、全体像を示して、私のアプローチが適切であることを確認します。次に、実装の詳細を提供します。

バックグラウンド

これは、私が取り組んでいる実際のアプリの重要な側面を表す簡単な例です。

マネージド オブジェクト モデル

シードデータ

シードデータ

ユーザー入力シナリオ

ユーザー入力シナリオ

現在の実装

コアデータの実装

コアデータの実装

データの保存と検索

データの保存と検索

もちろん、選択リストを参照して属性を選択するときに、その選択が 2 つの異なるストアからのものであるという証拠をユーザーに与えるべきではありません。

永続ストア コーディネーターのセットアップ

重要な目標

次の点に注意してください。

  1. 可能であれば、舞台裏でデータのバージョンを管理する必要なしにシード データの更新を行うことを希望します (つまり、新しいまたは変更されたシード データ レコードのみをアプリの更新で提供し、何らかの方法で削除を処理する)、バージョン チェック機能を実装する必要があります。ユーザーがバージョン n から n+5 にアップグレードする状況を処理するコード。
  2. ユーザー データとシード データには、2 つの間で重複するレコードを含めてはならず、同じ ManagedObjectModel を使用する必要があります。したがって、データとモデルの観点から、2 つのストアをマージしたり、1 つのストアを別のストアに移行したりする必要はありません。

リサーチ

この場合、 複数のストアから単一の永続ストアにオブジェクトを保存すると、2 つのストアがマージされ、すべてのレコードがフェッチされ、重複が除外され、コンテキストが保存されます。何千ものレコードをマージして重複をチェックする必要がないことを望んでいます。(上記の重要な目標 #2 を参照してください。)

この場合、 2 つの iOS Core Data Persistent Store をマージする効率的な方法は何ですか? 、特定のエンティティは読み取り専用で、その他は読み取り/書き込み可能です。私のアプリでは、シード データ ストア内のすべてのエンティティは読み取り専用であり、ユーザー データ ストア内の同じエンティティは読み取り/書き込みです。したがって、移行は適用できないと思います。(上記の重要な目標 #2 を参照してください。)

Apple のCore Data Programming Guideの「Persistent Store Coordinator」の下にある図 4「高度な永続化スタック」は、2 つの Store を使用する Core Data の実装を示していますが、ここでも、各 Store は個別の異なるオブジェクトで構成されています。私のアプリでは、各オブジェクトが各 Store に表示されます。

ここで提案されている解決策 Combining Two SQLite Stores Into Oneは、異なるストア内のオブジェクト間に関係のない 2 つのストアを持つことに関連しているように見えますが、私が実装したものと比較するための詳細は提供されていません。

私はMarcus Zarra による Core Data (2nd Edition)の最初の 3 つの章を読みましたが、彼は移行を必要としない 2 つのストアの使用には取り掛かりませんでした。ただし、第 3 章では、バージョン管理の非常に明確な例を示しています。(複雑なので、上記の重要な目標 #1 にたどり着きました。)

このソリューション ( Which persistent store is used by default by core data in iPhone ) は、ManagedObjectModel の複数の構成を使用することを提案していますが、各エンティティは 1 つの構成にのみ割り当てられます。この解決策が私の状況にどのように推定できるか、あるいは推定できるかどうかさえわかりません。

ここで提案されている解決策は、2 種類の永続ストアを持つ NSPersistentStoreCoordinator でしょうか。、私が必要とするものに近いです。残念ながら、リクエストのみが処理されます。保存用のクラス NSManagedObjectContext に、NSFetchRequest メソッド setAffectedStores に類似したメソッドがありません。

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

core-data - 既存の管理対象オブジェクト プロパティに基づいて新しいオブジェクトの関係を作成する

次のデータモデルがあります。

entityD と entityE は AC と関係がないことに注意してください。

私の DetailViewController は、管理対象オブジェクトからプロパティを取得し、新しい管理対象オブジェクトとして managedObjectContext に保存します。

現在、UILabels に既存のマネージド オブジェクトを次のように表示しています。

次に、保存アクションでコンテキストに保存します。

これは、nameD と nameE を設定する場合に機能します。EntityD と EntityE の新しく作成されたオブジェクト間の関係を作成しようとしています。entityE から entityD への関係が toD であるとしましょう。保存アクションで試しました:

しかし、次のエラーが発生します:「NSInvalidArgumentException」、理由:「-[__NSCFString managedObjectContext]: 認識されないセレクターがインスタンス 0x10939fd00 に送信されました」

新しく作成されたオブジェクト間の関係を確立するにはどうすればよいですか?

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

swift - データが存在するかどうかを確認するための BAD_EXC_ACCESS チェック:SWIFT

UITableViewControllerはデータを持っています。行をタップすると既存のデータを編集でき、 の + をタップUIBarButtonItemすると新しい情報を追加できます。Segue がコア データ オブジェクト(vc.managedObjectID) を渡すと、「詳細」View Controller が firstName フィールドにデータがあるかどうかを確認します。

Objective-Cでは、このようなことをします

firstName にデータがあるかどうかを確認するのに問題があります: var firstName = playerInformation.firstName は、新しいオブジェクトを追加するときにのみ EXC_BAD_ACCESS を引き起こします (playerInformatin が空であることを意味します)。タップして既存のデータを表示すると、正しいデータが返されます。データ。Swift で playerInfomation が空 (新しいレコード) かデータ (既存のデータ) があるかどうかを確認するにはどうすればよいですか?

セグエの準備

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

ios - IOS/Xcode/CoreData: モーダル コントローラーで提示コントローラーを参照する方法

controller1によってモーダルに作成されたビューを編集するモーダルコントローラーcontroller2があります。モーダルコントローラー2はストーリーボードで構成されていますが、次のようにviewdidloadの次のコードでコントローラー1から起動されます。

変更を保存した後にコントローラー2を閉じると、管理対象オブジェクトコンテキストの変更がコントローラー1に引き継がれます。

SO のいくつかの例では、次の使用を提案しています。

これは、閉じる直前に controller2 に入ります。

ただし、これを実行しようとすると、コントローラー 1 をインスタンス化する必要があることを示唆する "No Known Class Method" というエラーが表示されます。既にナビゲーション スタックにある controller1 のインスタンスに managedobjectcontext を渡したい。

これを機能させる方法についての提案をいただければ幸いです。

ありがとうございました。

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

ios - コア データ: 親コンテキストからオブジェクトを取得する必要がありますか、それとも子コンテキストに親と同じオブジェクトがありますか?

の親子コンテキストについて少し混乱していManagedObjectContextます。

子コンテキストをセットアップして親コンテキストを設定すると、子コンテキストには親コンテキストのすべてのオブジェクトが含まれますか? で作成されるストックCore Dataメソッドを使用していますが、をメインAppDelegateに変更しました。ConcurrencyQueue

データベースを更新するはずの私の方法では:

  • 子コンテキストの作成、親コンテキストの設定
  • 子コンテキストでブロックを実行
  • 親コンテキストからフェッチ
  • 子コンテキストでオブジェクトを作成または更新する
  • 子コンテキストで保存を呼び出す
  • 子コンテキストの保存を処理する通知リスナーを用意する
  • 親コンテキストを保存

私の問題は、子コンテキストに何かを保存しているように見えないことです。Update または Create ChatMessage の println メッセージが表示されません。ここで何が間違っていますか?

AppDelegate コア データ メソッド

更新を処理するデータベース クラス